`

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

 
阅读更多
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中定义的方法,如 下所示:

  getListView().setOnItemLongClickListener(new OnItemLongCLickListener(){

 public boolean onItemLongClick(AdapterView parent, View view, int position,
   long id) {
  Log.e("CallLogActivity", view.toString() + "position=" + position);
  CharSequence number = ((TextView) view).getText();
  Toast t = Toast.makeText(this, number + " is long clicked",
    Toast.LENGTH_LONG);
  t.show();
  return true;
 }

});



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

main.xml代码如下:
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<ListView 
    android:id="@+id/myListView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
</LinearLayout> 



list_item.xml代码如下:
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:id="@+id/itemTitle" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="22dip" 
    android:paddingRight="12dip" 
    /> 
<TextView 
    android:id="@+id/itemContent" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textSize="22dip" 
    /> 
</LinearLayout> 





activity MyListView.java代码如下:

package listview.pack; 
 
import java.util.ArrayList; 
import java.util.HashMap; 
import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.Toast; 
 
public class MyListView extends Activity { 
    /** Called when the activity is first created. */ 
    //声明ListView对象 
    ListView myListView; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        //生成ListView对象 
        myListView=(ListView)findViewById(R.id.myListView); 
        //创建ArrayList对象 并添加数据 
        ArrayList<HashMap<String,String>> myArrayList=new ArrayList<HashMap<String,String>>(); 
        for(int i=0;i<10;i++){ 
            HashMap<String, String> map = new HashMap<String, String>(); 
            map.put("itemTitle", "This Is Title "+i); 
            map.put("itemContent", "This Is Content "+i); 
            myArrayList.add(map); 
        } 
         
        //生成SimpleAdapter适配器对象 
        SimpleAdapter mySimpleAdapter=new SimpleAdapter(this, 
                myArrayList,//数据源 
                R.layout.list_items,//ListView内部数据展示形式的布局文件listitem.xml 
                new String[]{"itemTitle","itemContent"},//HashMap中的两个key值 itemTitle和itemContent 
                new int[]{R.id.itemTitle,R.id.itemContent});/*布局文件listitem.xml中组件的id   
                                                            布局文件的各组件分别映射到HashMap的各元素上,完成适配*/ 
         
        myListView.setAdapter(mySimpleAdapter); 
        //添加点击事件 
        myListView.setOnItemClickListener(new OnItemClickListener(){ 
            @Override 
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
                    long arg3) { 
                //获得选中项的HashMap对象 
                HashMap<String,String> map=(HashMap<String,String>)myListView.getItemAtPosition(arg2); 
                String title=map.get("itemTitle"); 
                String content=map.get("itemContent"); 
                Toast.makeText(getApplicationContext(),  
                        "你选择了第"+arg2+"个Item,itemTitle的值是:"+title+"itemContent的值是:"+content, 
                        Toast.LENGTH_SHORT).show(); 
            } 
             
        }); 
    } 
} 
分享到:
评论

相关推荐

    Android ListView获得选项中的值

    在Android中我们要如何获取ListView选中项的值呢? 我们举个例子,假如我们已经获得了手机中保存的联系人姓名和电话号码,并把它们显示在了一个Android ListView中,现在要实现的功能是当点击选中项时直接拨号,那么...

    android 的listview 内部item的布局包含checkbox控件

    3.重写Adapter的getView方法时,为每个checkbox添加事件响应并记录选择状态,通过获取获取状态记录值获取所有选择的checkbox值。 需要注意的是第三点,在重写getView方法时,不要判断convertView == null,如果判断...

    vb listview的基本用法 源码

    对VB中的listView控件用法的总结 主要包括:复选框数值获取 右击菜单 ctrl多选值的获取 双击复选框的选中等 双击条目 选中复选框 右击 “测试1”,输出左击和右击选中的行数 右击“测试2”,输出复选框选中的行数 ...

    MainActivity.java

    文本框自动补全,listview添加数组数据,文本框获取选中的行的值,将数组中的数据以列表的形式显示在listview中,选中列表中的任意一行,文本框即可获取其中的值。

    C#图像操作源码_listview数据添加去闪烁_给图片加日期_绘制噪点_取色器_图片缩略图__石英时钟_图片转换格式

    listview数据添加去闪烁 PictureBox显示图片 播放功能_flv 操作XML 打开Url 仿QQ截图 给图片加日期 绘制鼠标Cur 绘制文字 绘制选中 绘制噪点 绘制直线 获取当前时间 获取鼠标坐标 计时器例子 批量添加水印 批量图片...

    VB在listview选择当前行时自动让复选框打勾选择

    内容索引:VB源码,界面编程,listview,复选框 VB给listview控件添加自动选择功能,也就是说当我们用鼠标点击列表的某一行而非点击复选框的时候,复选框会自动打勾选中,再次单击鼠标则取消选中,在某些软件系统中,...

    Qt多级菜单

    结合使用QMenu和QAction提供的API实现了一个基于Qt的多级菜单demo,支持右键弹出菜单,稍加修改也同样适用于下拉菜单、按钮菜单等场合。

    MultilevelTreeList-快速实现Android多级树形列表,由鸿洋多级树形列表demo修改而来。支持ListView、RecyclerView。.zip

    获取选中内容:如果node的isChecked()为true,即为选中状态。StringBuilder sb = new StringBuilder(); //获取排序过的nodes //如果不需要刻意直接用 mDatas既可 final List allNodes = mAdapter....

    新浪阅读器的二次开发

    向listview添加行内容的时候要注意第一个用lvi.text后面都用lvi.subitems.add 如下; lvi.Text = pubdate; lvi.SubItems.Add(title); lvi.SubItems.Add(author); lvi.Tag = link;//存储超链接 2:在treeview加载...

    VBA常用技巧

    技巧109 组合框和列表框添加列表项的方法 12 109-1 使用RowSource属性添加列表项 12 109-2 使用List属性添加列表项 12 109-3 使用AddItem方法添加列表项 12 技巧110 去除列表框数据源的重复值和空格 12 技巧111 移动...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    超实用的jQuery代码段

    10.20 动态创建listview列表项 10.21 动态加载和切换页面 10.22 在页面切换时显示加载进度框 10.23 在屏幕旋转时更改显示样式 10.24 在列表框中实现加载更多效果 10.25 自定义选择菜单 10.26 使用多个选择菜单进行...

    delphi 开发经验技巧宝典源码

    0030 获取枚举值列表 23 0031 使两个变量位于同一个地址空间 23 0032 利用动态数组作为函数参数 24 0033 调用Register过程的注意事项 24 0034 在Delphi中禁止使用result 24 0035 如何在Delphi中录制代码...

    delphi 开发经验技巧宝典源码06

    0030 获取枚举值列表 23 0031 使两个变量位于同一个地址空间 23 0032 利用动态数组作为函数参数 24 0033 调用Register过程的注意事项 24 0034 在Delphi中禁止使用result 24 0035 如何在Delphi中录制代码...

    VBA编程技巧大全

    技巧109 组合框和列表框添加列表项的方法 247 109-1 使用RowSource属性添加列表项 247 109-2 使用List属性添加列表项 248 109-3 使用AddItem方法添加列表项 249 技巧110 去除列表框数据源的重复值和空格 251 技巧111...

    黑马程序员 安卓学院 万元哥项目经理 分享220个代码实例

    |--ListView之动态添加子view |--ListView优化之分页加载 |--ListView优化之动态加载 |--ListView优化之控制getView实现复杂显示 |--ListView优化之标准写法 |--listview老虎机 界面设计 水果机 |--listview页面...

Global site tag (gtag.js) - Google Analytics