Android中的ListView响应item内部按钮点击事件
来源:互联网 发布:紫牛软件 编辑:程序博客网 时间:2024/04/29 15:43
ListView可以说是我们在实际开发中最常用到的控件了。可以说每一个app都需要用到listview来显示列表,如果我们需要点击listView的不同按钮跳转到不同页面,具体逻辑在重写的onItemClick()方法中实现,这里不多说,不了解listView基本用法的小伙伴们可以去百度一下listView的基本用法,而button的点击事件实现的具体逻辑在重写的onClick()方法中实现。那么当我们要实现单个item的点击事件应该怎么实现呢?比如我们购物时,单个物品的点击+和-,表示选择数量,即响应item的内部点击事件,同时又不能和整体item的点击事件冲突。当然我们可以直接在adpter的getView中直接做内部按钮的点击处理,但是这样写的化,按钮一多的话,就显得整体代码比较拥挤,而且把Activity的点击事件放在adpter中,用起来有时会不方便。为此,我们可以使用接口回调的方式进行处理,让其在Activity中去响应,增加其灵活性。
代码如下:
adapter:
import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.TextView; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.TextView; public class ListItemAdapter extends BaseAdapter implements OnClickListener { private List<String> mList; private Context mContext; private InnerItemOnclickListener mListener; public ListItemAdapter(List<String> mList, Context mContext) { this.mList = mList; this.mContext = mContext; } @Override public int getCount() { // TODO 自动生成的方法存根 return mList.size(); } @Override public Object getItem(int position) { // TODO 自动生成的方法存根 return mList.get(position); } @Override public long getItemId(int position) { // TODO 自动生成的方法存根 return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = LayoutInflater.from(mContext).inflate(R.layout.item, null); viewHolder.bt1 = (Button) convertView.findViewById(R.id.bt1); viewHolder.bt2 = (Button) convertView.findViewById(R.id.bt2); viewHolder.tv = (TextView) convertView.findViewById(R.id.tv); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.bt1.setOnClickListener(this); viewHolder.bt2.setOnClickListener(this); viewHolder.bt1.setTag(position); viewHolder.bt2.setTag(position); viewHolder.tv.setText(mList.get(position)); return convertView; } public final static class ViewHolder { Button bt1, bt2; TextView tv; } interface InnerItemOnclickListener { void itemClick(View v); } public void setOnInnerItemOnClickListener(InnerItemOnclickListener listener){ this.mListener=listener; } @Override public void onClick(View v) { mListener.itemClick(v); } }
MainActivity.java
import java.util.ArrayList; import java.util.List; import com.example.listitemdemo.ListItemAdapter.InnerItemOnclickListener; import android.app.Activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ListView; public class MainActivity extends Activity implements InnerItemOnclickListener, OnItemClickListener { private ListView mList; private List<String> mDataList; private ListItemAdapter mAdapter; private static final String[] Datas = { "北京", "上海", "广州", "深圳", "苏州", "南京", "武汉", "长沙", "杭州", "长春", "无锡", "常州", "绍兴", "嘉兴", "衢州" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); mDataList = new ArrayList<String>(); for (int i = 0; i < Datas.length; i++) { mDataList.add(Datas[i]); } mAdapter = new ListItemAdapter(mDataList, this); mAdapter.setOnInnerItemOnClickListener(this); mList.setAdapter(mAdapter); mList.setOnItemClickListener(this); } private void initView() { mList = (ListView) findViewById(R.id.lv); } @Override public void itemClick(View v) { int position; position = (Integer) v.getTag(); switch (v.getId()) { case R.id.bt1: Log.e("内部item--1-->", position + ""); break; case R.id.bt2: Log.e("内部item--2-->", position + ""); break; default: break; } } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Log.e("整体item----->", position + ""); } }
我们在ListItemAdapter中自定义一个接口以及抽象方法itemClick(),在MainActivity中实现此接口从而重写itemClick(),并且通过调用setOnInnerItemOnClickListener(InnerItemOnclickListener listener)将实现此接口的类的对象传入,当我们点击按钮时会调用OnClick()方法,在此方法里面会调用子类重写的itemClick()方法,而方法里的参数v指的就是点击的button。所以我们只要在重写的itemClick()方法 里实现点击后的逻辑即可。
整体效果:
- Android中的ListView响应item内部按钮点击事件
- Android中ListView响应Item内部点击事件
- ListView的Item中的按钮点击事件
- Android小记:ListView中的按钮点击响应事件
- 在Activity中响应ListView内部按钮的点击事件
- 在Activity中响应ListView内部按钮的点击事件
- Activity中响应ListView内部按钮的点击事件
- 在Activity中响应ListView内部按钮的点击事件
- 在Activity中响应ListView内部按钮的点击事件
- 在Activity中响应ListView内部按钮的点击事件
- 在Activity中响应ListView内部按钮的点击事件
- 在Activity中响应ListView内部按钮的点击事件
- Android ListView:实现item内部控件的点击事件
- android listview item中的按钮点击事件如何添加,请教大神
- ListView中的item点击事件
- Activity中响应ListView内部按钮的点击事件,不要在Adapter中响应?
- ListView Item点击事件无效,不响应
- ListView的item点击事件不响应
- LeetCode——Palindrome Linked List
- mysql创建高性能的索引
- [BZOJ3669][Noi2014]魔法森林(动态spfa)
- 1231231
- 模拟实现 ListIterator类
- Android中的ListView响应item内部按钮点击事件
- Tensorflow实现Mnist和验证码识别、tensorflow中的交叉熵函数(区分多分类、多目标)
- Matlab如何制作和保存gif动图
- 普通java类中获取spring bean
- 执行环境及作用域
- java实现图形记事本
- 自定义类型——结构体、枚举、联合
- 可并堆模板
- Opencv学习资料