0

IM スタイル ページを含むアプリがあり、テキストはカスタム リストビューを使用して表示されます

ここに画像の説明を入力

アクティビティを終了して戻ってきたときに、すべてのデータを含むリストビューを引き続き表示したいと考えています。これまでのところ、onSavedInstance と onRestoredInstance を使用して arraylist の内容を保存してから、onRestoredInstance でアダプターを再度設定しようとしましたが、うまくいきません。

私の活動のコードは次のとおりです。

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;
}
4

3 に答える 3

0

データをに保存しonPause、アダプタをに再入力する必要がありonResumeます。インスタントメッセージなどは、永続データストレージ(SQLiteデータベースなど)に保存してから、をロードする必要がありCursorAdapterます。ライフサイクル全体でデータのロードを維持するための詳細の多くは、代わりにを使用してデータをロードActivityすることで抽象化できます。LoaderManagerCursorLoader

また、フォーカスが合っていないService場合でも、メッセージを受信して​​インスタントメッセージをデータストアに保存できるバックグラウンドで実行したいようです。Activity

于 2012-07-08T15:04:47.217 に答える
0

onSaveInstanceState()は、アプリの実行時にのみ使用されます。アプリが停止すると、バンドル内のすべてのデータが解放されます。

SharedPreferencesを使用する必要があります。

于 2012-07-08T15:52:24.483 に答える
0

in: onPause(){ 共有設定を開き、リストを保存します。}

in: onResume(){ 共有設定を開く、リストを復元する、setdata を変更する }

于 2012-07-08T15:01:26.203 に答える