android_ListView的操作

如何操作内存的ListView

有很多的时候,我们需要对数据进行增加,删除,修改的操作,但是如果我们每次进行操作数据之后,为了及时,更新ListView上面的数据,
我们有2个做法,

第一种:是操作数据库之后,然后再查询一次数据库,然后更新ListView上面的数据,(这里访问了2次数据库.比较不好)

第二种:是操作数据库之后,直接通知ListView,我刚才,做了什么操作,然后让ListView直接操作自己内存中的数据.(比第一种要好,在这里介绍一下)

一个核心

首先,对于ListView的操作,我们要知道一个核心

这里写图片描述

上面这张图片说明,一个ListView需要显示,
需要依赖adapter,一个adapter,又需要,data,和layout
.layout用来展示,data是来提供数据的.
所以,归根到底,一个ListView需要展示有多少条,是和个data的数据挂钩的.data有2条数据,listView就显示2条.data数据显示有3条,那么ListView就显示三条数据,

对于LiistView操作的这个核心就是:操作data,数据来源于集合,所以本质上就是操作集合

增加操作

BlcakListDao dao = new BlcakListDao(this);
List<BlackListInfo> infos = dao.query();//第一次查询所有数据出来.因为我们知道,adapter的显示的数据来源于list集合

//简化操作,就写核心代码了.


//假设我们把这么一条数据,插入数据库了.
BlackListBean info = new BlackListBean(blackNumber, type);
//为了提供用户的体验性,我在把数据插入到数据库之后,
//也应该及时的更新ListView上面的数据,展示给用户看


//在ListView的内存中加入一条数据
infos.add(info);//在infos集合中添加进,最新插入的数据.add(Object obj);该方法接受的就是一个obj对象

//然后通知ListView要刷新页面了
notifyDataSetChanged();//该方法是在adapter身上的

更新操作

在ListView里面更新数据,
一般的逻辑都是,先点击具体的条目,然后,把具体的数据带到下一个页面,然后更新了数据库的数据之后,把数据,返回来.
在做更新的逻辑的时候,要注意一点,就是你要更新那条条目的数据,就需要,把其position下标给记住。因为集合的更新,需要用到下标的。

现在代码演示一下
第一个activity
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
        //拿到具体被点击条目的数据
        BlackListInfo info = (BlackListInfo) infos.get(position);

        Intent intent = new Intent(this, BlackListEditActivity.class);
        //把数据带过去,让接受页面,进行更新操作
        intent.putExtra("updateInfo", info);
        //这需要把position带过去,因为,待会操作ListView的内存更新需要使用到
        intent.putExtra("position", position);

        startActivityForResult(intent, REQUESTCODE_UPDATE);
        //REQUESTCODE_UPDATE自己定义的请求的状态码

    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (data == null) {//因为有可能用户不修改,直接点击返回键,进行判断防止空指针
            return;
        }
        BlackListInfo info = (BlackListInfo) data.getSerializableExtra("info");


        int position = (Integer) data.getSerializableExtra("position");

//通知ListView,修改内存中的数据,既然是修改,当然需要告诉ListView,修改谁的(position),新的数据是什么(info);所以,set()方法,就需要传递这个2个参数
            infos.set(position, info);

        //通知ListView更新条目.
        blackAdapter.notifyDataSetChanged();//notifyDataSetChanged()数据是adapter里面的数据方法,要使用适配器来调用
    }

//第二个activity



    Intent intent =getIntent();
BlackListInfo
oldInfo=    intent.getSerializableExtra("updateinfo");


BlcakListDao dao = new BlcakListDao(this);
dao.update(oldInfo.number,2);

BlackListInfo info = new BlackListInfo(oldInfo.number, 2);


intent.putExtra("info", info);//更新之后的实体
intent.putExtra("position", position);//该实体的位置,还是和之前一样.

setResult(101, intent);

删除操作

在ListView里面,点击删除操作。一般都是在adapter里面的getView方法里面直接写的,
因为里面就有position,方便了获取下标,进行删除

        //告诉infos.
        infos.remove(position);

    //通知ListView,数据发生改变了,刷新一下界面
            notifyDataSetChanged();

总结
其实操作ListView内存中的数据,其实就是操作,List集合添加,修改,移除.然后在使用 notifyDataSetChanged();
来通知更新.在javaCode里面,需要使用index下标来操作.现在只是变成了position.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值