安卓开发学习笔记三

本文详细介绍了ListView的点击事件设置,强调了使用setOnItemClickListener而非setOnClickListener的原因,以及如何通过Adapter的onItemClickListener实现数据回调和位置参数的使用。同时,文章还探讨了Adapter的优化技巧,如条件判断避免重复加载布局,以及使用ViewHolder减少查找控件的开销,提高性能。
摘要由CSDN通过智能技术生成

1.Listview的事件设计

1.1listview的点击事件

首先listingview的点击事件不能用常用的的onclick,因为使用onclick无法使用adapter中的position,id,等等参数,即便点击也只是实现单纯的页面切换,不能实现listview的更新,这也是我之前博客中无法对参数回调的解释,我当时纠结于使用adapter中的onclick时候传值,可以传值但无法进行回调,用fragment页面中的onclick进行数据的传值,虽然可以回调但是不能使用position和id值的使用,即便能实现跳转,回调,但无法进行列表更新,没有任何意义,今天在学习的过程中,学习到了新的方法,即可使用position和id又可进行数据回调

mlistview.setOnItemClickListener(new lianxiren_adapter.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent send_intent=new Intent(getContext(),Tab_Activity.class);
                send_intent.putExtra("position",position);
                send_intent.putExtra("访客","WRS");
                startActivityForResult(send_intent,666);
            }
        });

这个方法和之前点击事件的区别在于,首先不是setonclicklistener,而是setitemonclicklistener,

同时里面也不是直接的onitemclicklistener,而是要引用相对应的适配器onitemclicklistener,然后再进适配器中对函数进行重写

下面对onitemclick里的参数进行讲解

参数1是当前item的view,通过它可以获得该项中的各个组件。
例如:TextView text = view.findViewById(R.id.text);

参数2是当前mineTravelList的positioin。这个id根据你在适配器中的写法可以自己定义。
例如:MineTravelList travel = mineTravel.get(position);

参数3是当前的item在listView中的相对位置id!

参考setOnItemClickListener参数含义 - Day_to_Day - 博客园 (cnblogs.com)

1.2 adapter的一些优化

convertView=mlayoutInflater.inflate(R.layout.item,null);

这样一段代码每次进入都要加载一次,我们可以添加一个判断条件,当covertview等于空的时候才进行创建,就可以大大节省时间和资源

同时我们还可以将获取控件的代码进行缓存起来,这样每次调用的时候就可以直接拿出用即可

class ViewHolder
    {
        TextView item_name_textview;
        TextView item_age_textview;
        TextView item_sex_textview;
        ImageView avater_imageview;
    }

首先创建一个ViewHolder类

然后在ViewHolder中定义一个ViewHolder,并写出判断函数

@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder viewHolder;
        if(convertView==null)
        {
            convertView=mlayoutInflater.inflate(R.layout.item,null);
            viewHolder=new ViewHolder();
            //获取控件
            viewHolder.item_name_textview=(TextView)         
            convertView.findViewById(R.id.textView_name_item);
            viewHolder.item_age_textview=(TextView)             
            convertView.findViewById(R.id.textView_age_item);
            viewHolder.item_sex_textview=(TextView) 
            convertView.findViewById(R.id.textView_sex_item);
            
          viewHolder.avater_imageview=convertView.findViewById(R.id.avater_imageView_item);
            //给viewholder进行打标签操作
            convertView.setTag(viewHolder);
        }
        else
        {
            viewHolder=(ViewHolder)convertView.getTag();
        }
        //利用viewholder进行数据的绑定
        viewHolder.item_name_textview.setText(muserinfo.get(position).getMname());
        viewHolder.item_age_textview.setText(muserinfo.get(position).getMage()+"");
        viewHolder.item_sex_textview.setText(muserinfo.get(position).getMsex());
        viewHolder.avater_imageview.setImageResource(R.drawable.moka);

        return convertView;
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值