адаптер массива.очистить() удаляет исходные данные


У меня возникла следующая проблема. У меня есть listview и две кнопки. В начале фрагмента некоторые данные хранятся в 2 Arraylists. Сначала содержимое первого Arraylist отображается в listview, который работает нормально. Когда пользователь нажимает первую кнопку, ListView показывает второй ArrayList. Что прекрасно работает для пользователя, но как только я вызываю адаптер.четкий(). Первые коллекции были удалены. Поэтому он не может вернуться к первому списку, нажав на первую кнопку. Я никогда удалите Arraylist, поэтому мне интересно, почему адаптер.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) вызывается inbound, он удаляется сразу же, как messageadapter.clear() вызывается. iutbound будет показан, но с вызовом showbox (0) после этого входящий не будет, потому что он пустой.

1 2

1 ответ:

Это произошло потому, что ваш член класса arraylist-это та же ссылка, которую вы установили в свой адаптер. Добавьте данные в адаптер с помощью

adapter.addAll(new ArrayList<Message>(inbound);