我遇到了以下问题。我有一个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();
}
}
因此,在开始时,列表将使用ArrayList入站填充。但是一旦调用了showbox(1),就会在调用messageadapter.clear()后立即删除。 将显示iutbound,但在入站之后调用showbox(0),因为它是空的。
答案 0 :(得分:6)
这是因为您的类成员arraylist与您在适配器中设置的引用相同。通过
将数据添加到适配器adapter.addAll(new ArrayList<Message>(inbound);