listView中adapter有不同的click事件的简单写法

在android中,listview一般都是通过一个adapter来绑定数据,一般的item的点击事件都会指向同一个目标(intent),只是所带的参数不同而已,但有的时候事与愿违,每个item的目标(intent)是不同的,此时我们需要一点技巧来处理这种情况。。。我的做法是每个item对应的entity添加一个listener ,来监听自己的事件。。上代码:

Listitem的定义[包含了一个onClickListener]

	public static class ListItem{
		public String text;
		public String description;
		public boolean isHeader;
		public OnClickListener listener;

		public ListItem(String t,String desc,boolean i,OnClickListener l)
		{
			text = t;
			description = desc;
			isHeader = i;
			listener = l;
		}
	}

初始化一个Arraylist<ListItem>[不同的item对应不同的onClickListener]

 private ArrayList<ListItem> initListItems(){
    	ArrayList<ListItem> listItems = new ArrayList<SettingAdapter.ListItem>(  );

    	listItems.add( new ListItem( "功能",null, true, null) );
    	listItems.add( new ListItem( "故障诊断设置",null, false, new ItemClickListener( SettingOBDActivity.class ) ) );

    	listItems.add( new ListItem( "系统",null, true, null) );
    	listItems.add( new ListItem( "修改密码",null, false,new ItemClickListener( SettingPasswordActivity.class ) ));
    	listItems.add( new ListItem( "时间设置",null, false,new ItemClickListener( Settings.ACTION_DATE_SETTINGS )) );
    	listItems.add( new ListItem( "蓝牙设置",null, false,new ItemClickListener( Settings.ACTION_BLUETOOTH_SETTINGS )) );
    	listItems.add( new ListItem( "WIFI设置",null, false,new ItemClickListener( Settings.ACTION_WIFI_SETTINGS )) );
    	listItems.add( new ListItem( "数据连接设置",null, false,new ItemClickListener( Settings.ACTION_WIRELESS_SETTINGS )) );
    	listItems.add( new ListItem( "联系客服",null, false, new OnClickListener()
    	{

			@Override
			public void onClick(View v)
			{

			    agent.startFeedbackActivity();
			}
		}) );
    	listItems.add( new ListItem( "检查更新",MyApplication.getApplication().getAppVersion(), false, new OnClickListener()
    	{

			@Override
			public void onClick(View v)
			{
				String version = MyApplication.getApplication().getAppVersion();
				if(version!=null){
					AppUpdateHelper.getInstance( SettingActivity.this ).checkUpdate(version,true);
				}
			}
		}) );

    	return listItems;
    }
    

自定义一个clickListener[重构构造方法,或许是你自己的activity,或许是系统的activity]

    class ItemClickListener implements OnClickListener{

    	private Class toActivity;
    	private String toAction;

    	public ItemClickListener(Class activity)
		{
    		toActivity = activity;
		}

    	public ItemClickListener(String action){
    		toAction = action;
    	}

		@Override
		public void onClick(View v)
		{
			if(toActivity!=null){
				Intent toIntent = new Intent(SettingActivity.this,toActivity);
				startActivityWithAnimation( toIntent );
			}else if(toAction!=null){
				Intent toIntent = new Intent( toAction );
				startActivity( toIntent );
			}
		}

    }

接下来就是具体的调用:

		mListView.setAdapter( adapter );
		mListView.setOnItemClickListener( new OnItemClickListener()
		{

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3)
			{
				ListItem item = (ListItem) arg0.getAdapter().getItem( arg2 );

				if(item.listener!=null){
					item.listener.onClick( arg1 );
				}
			}
		} );
	}

方法就是这样的。。欢迎大家吐槽  ps:若有更好的方法,大家留言哈

listView中adapter有不同的click事件的简单写法

时间: 2024-12-26 08:41:28

listView中adapter有不同的click事件的简单写法的相关文章

android 修改listview中adapter数据时抛出异常java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification问题

近日在做项目时遇到非必现crush,具体异常信息为: // Short Msg: java.lang.IllegalStateException // Long Msg: java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not mo

Android开发系列(十四):ListView用法、对ListView监听的三种方法以及ListView中Adapter的使用方法

一.ArrayAdapter的介绍以及ListView的用法: Adapter是数据和视图之间的桥梁,数据在adapter中做处理,然后显示到视图上面.就是用来绑定数据用的. 用一个小例子来介绍一下: public class FriendActivity extends Activity { private ListView listView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCrea

Android开发之ListView中Adapter的优化

ListView是Android开发最常用的控件,适配器adapter是将要显示的数据映射到View中并添加到ListView中显示 在实现ListView时,我们需要定义适配器如BaseAdapter.ArrayAdapter.CursorAdapter.SimpleAdapter等,并且重写其一下四个方法: 1 public int getCount(): 2 public Object getItem(int position) 3  public long getItemId(int p

超简便的ListView中Adapter的写法

对于 ListView 的使用,他有两个重点的部分,一个是下拉刷新和加载更多,这个今天我们不讲,另外一个是 BaseAdapter 的使用,这个是今天的主角,BaseAdapter 中又有 ViewHolder 模式来实现缓存视图 继承BaseAdapter类,实现以下几个方法 getCount() ->int 返回的是 List的个数 getView(int, View, ViewGroup)->View 返回显示的视图 getItemId(int position) ->long返回

vue中,svg图标添加click事件,部分浏览器不生效

vue项目中,使用svg图标,但是发现,为svg图标绑定click事件时,部分浏览器会出现,点击没有反应的情况,代码如下: <icon name="icon_add" @click="addSubject(scope.$index)"> </icon> 后来发现,在edge内核中只有点击svg边缘部分才会触发click事件 所以解决办法如下:为svg图标外面包裹一层元素,click事件绑定在外侧元素上 <a href='javascri

Android开发之关于ListView中adapter调用notifyDataSetChanged无效的原因

1.数据源没有更新,调用notifyDataSetChanged无效. 2.数据源更新了,但是它指向新的引用,调用notifyDataSetChanged无效. 3.数据源更新了,但是adpter没有收到消息通知,无法动态更新列表. 我遇到的问题是:数据源更新了,但是adapter中的数据源没有更新,所以造成调用notifyDataSetChanged无效

ExtJS中给Tree节点加click事件

第一种: 直接通过TreePanel中的Config Option中的listener来添加,代码如下: var TreePan = new Ext.tree.TreePanel({ id: 'TreePan', title: "侧边栏", useArrows: true, width: 240, height: 660, region: 'west', frame: true, autoScroll: true, enableDD: false, containerScroll: t

android 往dialog中加入listview,并实现listview中item的点击事件

LinearLayout linearLayoutMain = new LinearLayout(this);//自定义一个布局文件 linearLayoutMain.setLayoutParams(new LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); ListView listView = new ListView(this);//this为获取当前的上下文 listView.setFadingEdg

jQuery中click事件多次触发解决方案

jQuery 中元素的click事件中绑定其他元素的click事件. 因为jQuery中的click事件会累计绑定,导致事件注册越来越多. 解决方案: 1.能够避开,避免把click事件绑定到其他元素的例如click,hover等事件中. 2.不能避开,使用unbind("click"),然后再bind("click").