我遇到了以下问题。我有一个列表视图和两个按钮。在片段的开头,一些数据存储在 2 个数组列表中。首先,第一个 Arraylist 的内容显示在工作正常的列表视图中。当用户单击第一个按钮时,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) 不会因为它是空的。