ListView在不调用notifyDataSetChanged的情况下进行更新

时间:2014-02-22 21:13:39

标签: android

我想知道为什么如果我告诉我的适配器只使用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;
            }
        }
    }

1 个答案:

答案 0 :(得分:3)

setAdapter()不会同步刷新ListView,而只是将消息发布到需要刷新布局的主UI线程队列。当ListView进行布局/绘制传递时,其适配器实际上有6个项目,您已经在主UI线程中添加了项目,然后将控制权返回给处理消息队列的主线程循环器。