OnItemClick 接口与OnItemLongClick 接口

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

	}
}

猜你喜欢

转载自1124117571.iteye.com/blog/2297316