arrayadapter.clear()删除基础数据

Che*_*tah 2 android listview android-arrayadapter

我遇到了以下问题.我有一个listview和两个按钮.在片段的开头,一些数据存储在2个Arraylists中.首先,第一个Arraylist的内容显示在listview中,工作正常.当用户单击第一个按钮时,ListView会显示第二个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();
}
}
Run Code Online (Sandbox Code Playgroud)

因此,在开始时,列表将填充ArrayList入站.但是一旦调用了showbox(1),就会在调用messageadapter.clear()后立即删除.将显示iutbound,但在入站之后调用showbox(0),因为它为空.

tra*_*nho 7

发生这种情况是因为您的类成员arraylist与您在适配器中设置的引用相同.通过添加数据到适配器

adapter.addAll(new ArrayList<Message>(inbound);
Run Code Online (Sandbox Code Playgroud)