2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Android ListView 获取Item的值和得到每一个Item的view对象以及得到他们所对应的控件值

Android ListView 获取Item的值和得到每一个Item的view对象以及得到他们所对应的控件值

时间:2018-11-02 00:48:12

相关推荐

Android ListView 获取Item的值和得到每一个Item的view对象以及得到他们所对应的控件值

效果图:

图1:

图2:

具体的 ListView 与 BaseAdapter 之间的配合我就不列举代码了,你们可以自己搭建,也可以直接照抄我之前写的:

Android 中 ListView【列表】 与 三大适配器 全面解析 —— 这篇博客

链接: /qq_27494201/article/details/95858786

我直接列举实现这个功能的具体代码了:

实现 BaseAdapter 中的代码

public class MyAdapter extends BaseAdapter {private List<CostBean> costBeanList;private LayoutInflater inflater;// 通过构造方法关联数据源与适配器public MyAdapter(Context context, List<CostBean> costBeanList) {this.costBeanList = costBeanList;// context:要使用当前的Adapter的界面对象mInflater:布局 装载器对象this.inflater = LayoutInflater.from(context);}@Overridepublic int getCount() {return costBeanList.size();}@Overridepublic Object getItem(int position) {return costBeanList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(final int position, View convertView, ViewGroup parent) {ViewHolder holder;//第一次创建view即可,以免给程序带来太多负担if (convertView == null){holder = new ViewHolder();// 由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为nullconvertView = inflater.inflate(R.layout.ly_item,null);holder.imageView = convertView.findViewById(R.id.img_view);holder.title = convertView.findViewById(R.id.tv_name);holder.content = convertView.findViewById(R.id.tv_info);holder.button = convertView.findViewById(R.id.btn_button);//这句话的意思就是,让convertView与holder产生关联,通过set保存在Tag中convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();//通过getTag,取出上面绑定的holder,以免多次绑定,造成资源浪费}//设置控件的数据,可以理解为从封装的数据中取出一个一个对应的值CostBean costBean = costBeanList.get(position);holder.imageView.setImageResource(costBean.getImgId());holder.title.setText(costBean.getName());holder.content.setText(costBean.getInfo());//利用回调的原理,来对按钮进行监听holder.button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {xmOnItemDeleteListener.onDeleteClick(position);}});return convertView;}//定义接口方法public interface onItemDeleteListener {void onDeleteClick(int i);}//声明接口private onItemDeleteListener xmOnItemDeleteListener;//根据我们在回调里写的是 xmOnItemDeleteListener 调用的onDeleteClick//系统就会执行下面的方法public void setXmOnItemDeleteListener(onItemDeleteListener xmOnItemDeleteListener){this.xmOnItemDeleteListener = xmOnItemDeleteListener;}class ViewHolder{public ImageView imageView;public TextView title;public TextView content;private Button button;}

MainActivity.java:

public class MainActivity extends AppCompatActivity {private MyAdapter adapter;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final ListView listView = findViewById(R.id.lv_list);List<CostBean> costBeanList = new ArrayList<>();//创建封装好的bean对象//装配数据源costBeanList.add(new CostBean(R.drawable.ic_one,"狐狸","聪明的狐狸"));costBeanList.add(new CostBean(R.drawable.ic_kenan,"玫瑰","带刺的花儿"));costBeanList.add(new CostBean(R.drawable.ic_three,"国王","没有一个臣民"));adapter = new MyAdapter(this,costBeanList);// 实现回调接口adapter.setXmOnItemDeleteListener(new MyAdapter.onItemDeleteListener() {@Override// 当用户点击了收藏按钮时,系统就会自动调用里面的方法public void onDeleteClick(int position) {// position 是Item的位置View view = findView(position,listView); // 根据 position的下标 与 listView找到他的 ViewtextView = view.findViewById(R.id.tv_name);String str = textView.getText().toString();Toast.makeText(MainActivity.this,str + "\n第 "+position+" 项",Toast.LENGTH_LONG).show();}});listView.setAdapter(adapter);}// 得到每一个不同的Item所对应的 Viewprivate View findView(int position, ListView listView) {int firstListItemPosition = listView.getFirstVisiblePosition();int lastListItemPosition = firstListItemPosition+ listView.getChildCount() - 1;if (position < firstListItemPosition || position > lastListItemPosition) {return listView.getAdapter().getView(position, null, listView);} else {final int childIndex = position - firstListItemPosition;return listView.getChildAt(childIndex);}}}

利用回调的原理,来解决这个问题!

点击运行,即可实现效果

下面我要列举一个我遇到的坑点:

具体的错误如图:

最后,我真诚的希望能评论一句嘛,让我知道你来过,我会很开心的

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。