获取ListView里面项的内容

一开始有人说使用HashMap先把值存进去,然后再取,这样的方法思想简单,就是用起来有点复杂。
后来一想一定有相应的点击事件,果不其然

ListView list = (ListView) findViewById(R.id.listview);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
   @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      Object listItem = list.getItemAtPosition(position);
   } 
});

这个listItem就是得到的点击对象,但是无法调用setOnClickListener事件,为什么呢

进一步研究getItemAtPosition方法的定义

public Object getItemAtPosition(int position) {
        T adapter = getAdapter();
        return (adapter == null || position < 0) ? null : adapter.getItem(position);
    }

    public long getItemIdAtPosition(int position) {
        T adapter = getAdapter();
        return (adapter == null || position < 0) ? INVALID_ROW_ID : adapter.getItemId(position);
    }

发现最终还是调用getItem方法,这个方法是在继承BaseAdapter的时候重写的方法

@Override
    public Object getItem(int position) {
       return null;
    }

可以看出这个方法返回的是一个空对象,当然就没有点击事件了。但是想触发点击事件怎么办呢,返回一个当前的点击对象?怎么做呢?

// parent 相当于listview Y适配器的一个指针,可以通过它来获得Y里装着的一切东西,再通俗点就是说告诉你,你点的是Y,不是X - -
// view 是你点b item的view的句柄,就是你可以用这个view,来获得b里的控件的id后操作控件
// position 是b在Y适配器里的位置(生成listview时,适配器一个一个的做item,然后把他们按顺序排好队,在放到listview里,意思就是这个b是第position号做好的)
// id 是b在listview Y里的第几行的位置(很明显是第2行),大部分时候position和id的值是一样的

不妨笔锋一转,回到源头上来。如果只想识别特殊位置的对象,不如做一个判断,直接通过position判断那些固定位置的List。

比如说第0个位置上的:

if(position == 0){
//write your logic
}else{
//write your logic
}

经过实践证实:通过修改getItem返回的对象就可以获得当前点击对象
这里贴出模板代码:

list_friend.setOnItemClickListener(new AdapterView.OnItemClickListener(){

            @Override
            public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
                if(position == 0){
                   //write your code
                }else{
                    view.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            Object_Item = your_Adapter.getItem(position);
                        }
                    });
                }

            }
        });
 @Override
    public Object getItem(int position) {
       return datalist.get(position);
    }

your_Adapter和datalist替换成你的适配器和数据列表,Object_Item是你返回的对象也就是datalist里面的泛型对象

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值