我想知道为什么如果我告诉我的适配器只使用5个项目并且我不调用notifyDataSetChanged,我会得到第六项的列表。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ListView list = (ListView) findViewById(R.id.list);
final List<Integer> data = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
list.setAdapter(new MyAdapter(data));
data.add(6);
}
class MyAdapter extends BaseAdapter {
List<Integer> data;
public MyAdapter(List<Integer> _data) {
data = _data;
}
@Override
public int getCount() {
return data.size();
}
@Override
public Object getItem(int i) {
return data.get(i);
}
@Override
public long getItemId(int i) {
return data.get(i);
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
TextView textView = new TextView(MainActivity.this);
textView.setText(String.valueOf(data.get(i)));
return textView;
}
}
}
答案 0 :(得分:3)
setAdapter()
不会同步刷新ListView
,而只是将消息发布到需要刷新布局的主UI线程队列。当ListView
进行布局/绘制传递时,其适配器实际上有6个项目,您已经在主UI线程中添加了项目,然后将控制权返回给处理消息队列的主线程循环器。