ListView添加事件并获取选中项的值

    博客分类:
  • Android
http://www.beijibear.com/?aid=341
为什么ListView.setOnItemClickListener、setOnCreateContextMenuListener会无效:
http://blog.csdn.net/mahaiyun18/article/details/6531371
如果ListView中的单个Item的view中存在checkbox,button等view,会导致ListView.setOnItemClickListener无效,
事件会被子View捕获到,ListView无法捕获处理该事件.
解决方法:
在checkbox、button对应的view处加android:focusable="false"
android:clickable="false" android:focusableInTouchMode="false"
其中focusable是关键


Android ListView/ListActivity点击长按事件:
http://blog.163.com/zmhot88@126/blog/static/16984664720107319215488/
ListActivity和ListView是很常用的组件,用来制作列表形式的用户界面。本文介绍如何正确处理ListView中的条目短按和长 按事件,他们的处理方式是不同的。

  对于短按事件,处理起来比较简单,我们只需要覆盖ListActivity的onListItemClick()方法,如下所示:

@Override
protected void onListItemClick(ListView arg0, View arg1, int arg2, long arg3) {
CharSequence s = ((TextView)arg1).getText();
Log.e("CallLogActivity",s+ " is clicked");
super.onListItemClick(arg0, arg1, arg2, arg3);
}

  对于长按事件,我们需要给listview注册一个OnItemLongClickListener,并实现Listener中定义的方法,如 下所示:

Java代码
  1. getListView().setOnItemLongClickListener(newOnItemLongCLickListener(){
  2. publicbooleanonItemLongClick(AdapterViewparent,Viewview,intposition,
  3. longid){
  4. Log.e("CallLogActivity",view.toString()+"position="+position);
  5. CharSequencenumber=((TextView)view).getText();
  6. Toastt=Toast.makeText(this,number+"islongclicked",
  7. Toast.LENGTH_LONG);
  8. t.show();
  9. returntrue;
  10. }
  11. });



下面是例子代码。不包含上述技术
--------------------------------------------

main.xml代码如下:
Xml代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <ListView
  8. android:id="@+id/myListView"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. />
  12. </LinearLayout>



list_item.xml代码如下:
Xml代码
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="horizontal"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <TextView
  8. android:id="@+id/itemTitle"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:textSize="22dip"
  12. android:paddingRight="12dip"
  13. />
  14. <TextView
  15. android:id="@+id/itemContent"
  16. android:layout_width="wrap_content"
  17. android:layout_height="wrap_content"
  18. android:textSize="22dip"
  19. />
  20. </LinearLayout>





activity MyListView.java代码如下:

Java代码
  1. packagelistview.pack;
  2. importjava.util.ArrayList;
  3. importjava.util.HashMap;
  4. importandroid.app.Activity;
  5. importandroid.os.Bundle;
  6. importandroid.view.View;
  7. importandroid.widget.AdapterView;
  8. importandroid.widget.AdapterView.OnItemClickListener;
  9. importandroid.widget.ListView;
  10. importandroid.widget.SimpleAdapter;
  11. importandroid.widget.Toast;
  12. publicclassMyListViewextendsActivity{
  13. /**Calledwhentheactivityisfirstcreated.*/
  14. //声明ListView对象
  15. ListViewmyListView;
  16. @Override
  17. publicvoidonCreate(BundlesavedInstanceState){
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.main);
  20. //生成ListView对象
  21. myListView=(ListView)findViewById(R.id.myListView);
  22. //创建ArrayList对象并添加数据
  23. ArrayList<HashMap<String,String>>myArrayList=newArrayList<HashMap<String,String>>();
  24. for(inti=0;i<10;i++){
  25. HashMap<String,String>map=newHashMap<String,String>();
  26. map.put("itemTitle","ThisIsTitle"+i);
  27. map.put("itemContent","ThisIsContent"+i);
  28. myArrayList.add(map);
  29. }
  30. //生成SimpleAdapter适配器对象
  31. SimpleAdaptermySimpleAdapter=newSimpleAdapter(this,
  32. myArrayList,//数据源
  33. R.layout.list_items,//ListView内部数据展示形式的布局文件listitem.xml
  34. newString[]{"itemTitle","itemContent"},//HashMap中的两个key值itemTitle和itemContent
  35. newint[]{R.id.itemTitle,R.id.itemContent});/*布局文件listitem.xml中组件的id
  36. 布局文件的各组件分别映射到HashMap的各元素上,完成适配*/
  37. myListView.setAdapter(mySimpleAdapter);
  38. //添加点击事件
  39. myListView.setOnItemClickListener(newOnItemClickListener(){
  40. @Override
  41. publicvoidonItemClick(AdapterView<?>arg0,Viewarg1,intarg2,
  42. longarg3){
  43. //获得选中项的HashMap对象
  44. HashMap<String,String>map=(HashMap<String,String>)myListView.getItemAtPosition(arg2);
  45. Stringtitle=map.get("itemTitle");
  46. Stringcontent=map.get("itemContent");
  47. Toast.makeText(getApplicationContext(),
  48. "你选择了第"+arg2+"个Item,itemTitle的值是:"+title+"itemContent的值是:"+content,
  49. Toast.LENGTH_SHORT).show();
  50. }
  51. });
  52. }
  53. }

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. android studio远程仓库依赖
  3. android Fragment 与 Fragment 之间传参(对象)
  4. [Android]PopupWindow 点击外部区域无法关闭的问题
  5. Android代码替代枚举的正确之道
  6. Android(安卓)怎么样调用HAL的
  7. Android(安卓)apk 的反编译及保护杂谈
  8. 挂断电话的实现(即类似于电话号码黑名单)
  9. 吐血分享!Android源码50例汇总,欢迎各位下载

随机推荐

  1. Android OpenCV 人脸识别 Opencv3.1
  2. android的文件读写
  3. Ubuntu11.10 + android环境配置流程
  4. 做 Android Layout 达人~
  5. 整理 酷炫 Android 开源UI框架 表格
  6. Android systemserver 解析
  7. 全面了解Android热修复技术
  8. 2013.08.08——— android 中文简繁体转
  9. Android 自定义CheckBox 样式
  10. 关于CoordinatorLayout展开与折叠相关属