listView布局中按钮点击事件放到activity或者fragment中响应
2016-02-14 09:45
435 查看
这里采用接口回调的方法
看adapter类中
MainActivity类中
看adapter类中
public class ContentAdapter extends BaseAdapter implements View.OnClickListener { private static final String TAG = "ContentAdapter"; private List<String> mContentList; private LayoutInflater mInflater; private Callback mCallback; /** * 响应按钮点击事件,调用子定义接口,并传入View */ @Override public void onClick(View v) { mCallback.click(v); } /** * 自定义接口,用于回调按钮点击事件到Activity */ public interface Callback { public void click(View v); } public ContentAdapter(Context context, List<String> contentList, Callback callback) { mContentList = contentList; mInflater = LayoutInflater.from(context); mCallback = callback; } @Override public int getCount() { Log.i(TAG,"getCount"); return mContentList.size(); } @Override public Object getItem(int position) { Log.i(TAG, "getItem"); return mContentList.get(position); } @Override public long getItemId(int position) { Log.i(TAG, "getItemId"); return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Log.i(TAG, "getView"); ViewHolder holder; if(convertView == null){ convertView = mInflater.inflate(R.layout.item_list,parent,false ); holder = new ViewHolder(); holder.textView = (TextView) convertView.findViewById(R.id.text); holder.button = (Button) convertView.findViewById(R.id.button); convertView.setTag(holder); }else { holder = (ViewHolder) convertView.getTag(); } holder.textView.setText(mContentList.get(position)); holder.button.setOnClickListener(this); holder.button.setTag(position); return convertView; } public class ViewHolder{ TextView textView; Button button; } }
MainActivity类中
public class MainActivity extends AppCompatActivity implements ContentAdapter.Callback, AdapterView.OnItemClickListener { ListView mListView; private static final String[] CONTENTS = {"郑州", "上海", "广州", "深圳", "苏州", "南京", "武汉", "长沙", "杭州"}; private List<String> contentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mListView = (ListView) findViewById(R.id.listview); init(); } private void init() { contentList = new ArrayList<String>(); for (int i = 0; i < CONTENTS.length; i++) { contentList.add(CONTENTS[i]); } mListView.setAdapter(new ContentAdapter(this, contentList, this)); mListView.setOnItemClickListener(this); } /** * 接口方法,响应listview按钮点击事件 * * @param v */ @Override public void click(View v) { Toast.makeText(this, "listview的内部button被点击了!,点击的位置是-->" + (Integer) v.getTag() + ",内容是-->" + contentList.get((Integer) v.getTag()), Toast.LENGTH_SHORT).show(); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(this, "list的item被点击了,点击的位置是-->" + position, Toast.LENGTH_SHORT).show(); } }
相关文章推荐
- 跟陈皓一起学makefile
- java web 项目如何部署到互联网中 通过输入域名访问?
- RecyclerView与ListView的异同
- 極客范 – GeekFan.net | Adafruit的樹莓派教程第一課:為你的樹莓派准備一張SD卡 - 極客范 - GeekFan.net 极客范 – GeekFan.net 首頁 科技資訊 硬件
- PHP二维数组排序简单实现方法
- 别小看了“坐轮椅的超级玛丽”
- iOSMVC 模式
- 数据结构图文解析之:数组、单链表、双链表介绍及C++模板实现
- windows下 用串行連接控制樹莓派
- The little prince
- WINDOWS命令和批处理
- scapy-网络掌控者-基本
- 天声人語 20160214 大仏様の健康診断
- 杂谈
- 如何设置域
- oracle 归档日志满处理
- Android 网络编程--socket tcp/ip udp http之间的关系
- Debian 6 LTS将于2月29号结束支持:是时候升级了
- 数据结构之通用双端链表
- github 提交更新