2

私は次の問題を抱えています。リストビューと 2 つのボタンを取得しました。Fragment の開始時に、いくつかのデータが 2 つの Arraylists に格納されます。最初に、最初の Arraylist の内容がリストビューに表示され、正常に動作します。ユーザーが最初のボタンをクリックすると、ListView は 2 番目の ArrayList を表示します。これはユーザーにとっては問題なく機能しますが、adapter.clear() を呼び出すとすぐに機能します。最初の Arraylist が削除されました。そのため、最初のボタンをクリックして最初のリストに戻ることはできません。私は Arraylist を決して削除しないので、なぜ adapter.clear() がそれを行うのだろうか。どんな助けでもいいでしょう。下のコード。

public class MessagesFragment extends Fragment {

private ArrayList<Message> outbound;
private ArrayList<Message> inbound;
private MessageAdapter messageadapter;
private int box;
private View rootView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_messages, container,
            false);
    outbound = new ArrayList<Message>();
    inbound = new ArrayList<Message>();
    this.rootView = rootView;
    box = 0;
    messageadapter = new MessageAdapter(getActivity(),
                    R.layout.item_message, inbound);
    ((ListView) rootView.findViewById(R.id.lv_message))
                    .setAdapter(messageadapter);
    initializeListeners();
    return rootView;
}

private void initializeListeners() {
    rootView.findViewById(R.id.rb_message_inbox).setOnClickListener(
            new OnClickListener() {

                @Override
                public void onClick(View v) {
                    showBox(0);
                }
            });

    rootView.findViewById(R.id.rb_message_outbox).setOnClickListener(
            new OnClickListener() {

                @Override
                public void onClick(View v) {
                    showBox(1);
                }
            });     
}

private void showBox(int box) {
    messageadapter.clear();
    switch (box) {
    case 0:
        messageadapter.addAll(inbound);
        break;
    case 1:
        messageadapter.addAll(outbound);
        break;
    }
    this.box = box;
    messageadapter.notifyDataSetChanged();
}
}

そのため、最初にリストに ArrayList インバウンドが取り込まれます。ただし、showbox(1) が呼び出されると、受信は messageadapter.clear() が呼び出されるとすぐに削除されます。iutbound が表示されますが、そのインバウンドの後に showbox(0) を呼び出すと、空であるため表示されません。

4

1 に答える 1

7

これは、クラス メンバーの arraylist が、アダプターに設定したものと同じ参照であるために発生しました。次の方法でアダプタにデータを追加します

adapter.addAll(new ArrayList<Message>(inbound);
于 2013-09-03T16:48:12.490 に答える