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;
}