ListView 列表项点击事件
OnItemClick 接口
(一)概述
OnItemClick 接口负责监听列表项单击事件。
(二)常用方法
void onItemClick(AdapterView<?> parent,View view,int position,long id)
作用:监听用户单击列表项的事件
说明:
1)参数-parent:当前列表对象,如 ListView 对象。
2)参数-view:被单击的列表项对象。
3)参数-position:被单击的 view 在适配器中的索引值。
4)参数-id:被单击的列表项在列表中的索引值。
position 与 id 的值相同。
OnItemLongClick 接口
(一)概述
OnItemLongClick 接口负责监听用户长按列表项的事件。
(二)常用方法
public boolean onItemLongClick(AdapterView<?> parent,View view,int position,long id)
作用:监听用户长按列表项事件。
参数说明:参见 onItemClick()中参数的说明。.
返回:返回 true 表示本方法处理了长按事件,该事件不会分发个其它控
件处理。若返回 false,则本次长按事件还会分发给其它控件处理。
说明:长按是指触摸控件的事件超过0.5秒
简单总结:
OnItemClick就是监听短按操作的监听器
OnItemLongClick就是监听长按操作的监听器
实例:
package com.jxust.day_05_01_listviewdemo; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { ListView mlvGeneral; List<GeneralBean> mGenerals; // 代表十个军事家的集合 GeneralAdapter mAdapter; int[] resid = { R.drawable.baiqi, R.drawable.caocao, R.drawable.chengjisihan, R.drawable.hanxin, R.drawable.lishimin, R.drawable.nuerhachi, R.drawable.sunbin, R.drawable.sunwu, R.drawable.yuefei, R.drawable.zhuyuanzhang }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initData(); // 初始化数据 initView(); setListener(); //设置监听器 } private void setListener() { setOnItemClickListener(); setOnItemLongClickListener(); } // 长按操作 private void setOnItemLongClickListener() { mlvGeneral.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, mGenerals.get(position).getName()+"被长按", 2000).show(); //false的作用就是告诉系统自己没有处理,交给其他监听器,从而就到了短按操作的那个监听器 //true的作用就是告诉系统自己已经处理了 return true; } }); } // 短按操作 private void setOnItemClickListener() { mlvGeneral.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(MainActivity.this, mGenerals.get(position).getName()+"被短按", 2000).show(); } }); } private void initView() { mlvGeneral = (ListView) findViewById(R.id.lvGeneral); mAdapter = new GeneralAdapter(); // 创建适配器 // 和ListView 关联起来 mlvGeneral.setAdapter(mAdapter); } private void initData() { // 将资源中的字符串数组转换为Java数组 String[] names = getResources().getStringArray(R.array.generals); mGenerals = new ArrayList<GeneralBean>(); for (int i = 0; i < names.length; i++) { GeneralBean bean = new GeneralBean(resid[i], names[i]); mGenerals.add(bean); } } // 定义代表军事家的适配器类 class GeneralAdapter extends BaseAdapter { @Override public int getCount() { return mGenerals.size(); } @Override public Object getItem(int position) { return mGenerals.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 拿到 ListView 的布局并且转换为 View 类型的对象 View layout = View.inflate(MainActivity.this, R.layout.item_generals, null); // root表示的是父容器 // 找到显示军事家头像的 ImageView // layout的作用就是将目标转换为 layout.item_generals ImageView ivThumb = (ImageView) layout.findViewById(R.id.ivThumb); // 找到显示军事家名字的 TextView TextView tvName = (TextView) layout.findViewById(R.id.tvName); // 获取军事家中下标是 position 的军事家对象 GeneralBean bean = (GeneralBean) getItem(position); // 显示军事家头像 ivThumb.setImageResource(bean.getResid()); // 显示军事家的姓名 tvName.setText(bean.getName()); return layout; } } }