关于ListView中notifyDataSetChanged()刷新数据不更新原因

本文参照此文 关于ListView中notifyDataSetChanged()刷新数据不更新原因,仅作个人学习记录用。

本人在写一个从sqlite数据库里面获取数据的例子,但是发现获取到的list并不能被 myMarkAdapter.notifyDataSetChanged(); 更新;
以下是具体代码。其中的cards即为数据源。
总之一句话,不能让adapter认为你使用了一个全新的数据源,这样它识别不出来;要在原来的基础上clear(),再addall();这样它就认为还是原来的数据源。

    private MyMarkAdapter myMarkAdapter = null;
    private List<Card>cards = new ArrayList<>();
    private Button btnEvents;
    private Button btnDonation;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_mymark);

        //初始化DBManager
        mgr = new DBManager(this);
        cards = mgr.queryMyMark("1");
        tvSum = (TextView)findViewById(R.id.tv_sum);
        listView = (ListView)findViewById(R.id.listView);
        btnEvents = (Button)findViewById(R.id.btn_events_mymark);
        btnDonation = (Button)findViewById(R.id.btn_donation_mymark);

        tvSum.setText("" +cards.size()/* + "概览:" +cards.get(0).getContent()*/);
        myMarkAdapter = new MyMarkAdapter(cards,MyMark.this);
        listView.setAdapter(myMarkAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ((MyApplication)MyMark.this.getApplication()).setIntentObject(cards.get(position));
                startActivity(new Intent(MyMark.this,DetailsActivity.class));
            }
        });
        Listener listener = new Listener();
        btnEvents.setOnClickListener(listener);
        btnDonation.setOnClickListener(listener);

    }

    private class Listener implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.btn_events_mymark:
<span style="background-color: rgb(255, 0, 0);">                    //错误
                    cards.clear();
                    cards = mgr.queryMyMark("1");</span>
                    myMarkAdapter.notifyDataSetChanged();
//                    listView.setAdapter(new MyMarkAdapter(cards,MyMark.this));
                    tvSum.setText("" +cards.size()/* + "概览:" +cards.get(0).getContent()*/);
                    break;
                case R.id.btn_donation_mymark:
<span style="background-color: rgb(51, 255, 51);">                    //正确
                    cards.clear();
                    cards.addAll(mgr.queryMyMark("2"));</span>
                    myMarkAdapter.notifyDataSetChanged();
//                    listView.setAdapter(new MyMarkAdapter(cards, MyMark.this));
                    tvSum.setText("" +cards.size()/* + "概览:" +cards.get(0).getContent()*/);
                    break;
                default:
                    break;
            }

        }
    }





评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值