android-listview - 通过调用脯氨酸( ) 恢复自定义listview和数据之后,再将它的还原

  显示原文与译文双语对照的内容
0 0

我有一个带有IM样式页面的应用程序,该文本是使用定制的listview显示

enter image description here

当我离开 Activity 后,我想让我仍然拥有我的所有数据的listview 。 到目前为止,我尝试使用onSavedInstance和onRestoredInstance保存arraylist的内容,然后在onRestoredInstance中再次设置适配器,但这并不有效。

下面是我的Activity 代码:


private ArrayList<String> nameList = new ArrayList<String>();
 private ArrayList<String> messageList = new ArrayList<String>();
 private ArrayList<String> timeList = new ArrayList<String>();

 Button send = (Button) findViewById(R.id.chat_send);
 EditText send = (EditText) findViewById(R.id.edit_text);
 ListView chat_list = (ListView) findViewById(R.id.chat_list);
 MyCustomArrayAdapter myArrayAdapter = new MyCustomArrayAdapter(this, messageList, nameList,
 timeList, receiverName, senderName, language_chosen);

 chat_list.setAdapter(myArrayAdapter); 

 send.setOnClickListener(new OnClickListener() {

 @Override
 public void onClick(View v) {

 String new_text = edit_text.getText().toString();
 String sys_time = new Time(System.currentTimeMillis())
. toString();
 timeList.add(sys_time);
 messageList.add(new_text);
 nameList.add(username);
 myArrayAdapter.notifyDataSetChanged();
 chat_list.setSelection(chat_list.getChildCount()-1);
 }
 });

这是我的适配器的代码


public MyCustomArrayAdapter(Context context, ArrayList<String> planetList,
 ArrayList<String> NameList, ArrayList<String> TimeList,
 String receiver, String sender, String language) {
 super(context, R.layout.custom_chat_layout, planetList);
 this.context = context;
 messageList = planetList;
 nameList = NameList;
 timeList = TimeList;
 receiverName = receiver;
 senderName = sender;
 language_chosen = language;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
 LayoutInflater inflater = (LayoutInflater) context
. getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 holder = new ViewHolder();

 rowView = inflater.inflate(R.layout.custom_chat_layout, parent, false);
 holder.chat_name = (TextView) rowView
. findViewById(R.id.custom_chat_name);
 holder.chat_time = (TextView) rowView
. findViewById(R.id.custom_chat_timestamp);
 holder.chat_text = (TextView) rowView
. findViewById(R.id.custom_chat_text);


 holder.chat_name.setText(nameList.get(position));
 holder.chat_time.setText(timeList.get(position));
 holder.chat_text.setText(messageList.get(position));

 return rowView;
}

static class ViewHolder {
 TextView chat_name;
 TextView chat_time;
 TextView chat_text;
 RelativeLayout relative;
 RelativeLayout relative1;
}

时间: 原作者:

0 0

你应该将数据保存在 onPause 中,并在 onResume 中填充适配器。 诸如即时消息之类的东西应该保存到持久数据存储( 例如SQLite数据库),然后用 CursorAdapter 加载。 在 Activity 生命周期中维护数据负载的大量细节可以通过使用 LoaderManager 并将数据加载到 CursorLoader 中来抽象出来。

它也像你想要在后台运行的Service 一样,可以接收消息并将即时消息保存到数据存储,即使 Activity 不在焦点中。

原作者:
0 0

在:onPause ( ) {打开sharedpreferences中,保存你的列表。 %7D

在:onResume ( ) {打开 sharedpreferences,还原你的列表,setdata更改的}

原作者:
0 0

仅在运行应用程序时使用 onSaveInstanceState() 。 应用程序停止后,捆绑包中的所有数据都将被释放。

你应该使用 SharedPreferences

...