2 znl 12 znl_12 于 2013.04.09 15:46 提问

ListView 获得点击 view 和相应的 row

我想从 listview 子类的 onClick 事件中获取点击的 row。我能获取点击 item 但是不能在那个事件中点击 row。如何解决这个问题。
代码如下:

public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        Holder holder = new Holder();
        pos = position;
        if(convertView == null)
        {
            System.out.println(position);
            convertView= inflater.inflate(R.layout.list_layout,(ViewGroup)parent.findViewById(R.layout.list_layout));
            holder.form_name  = (TextView) convertView.findViewById(R.id.list_text);
            holder.form_details = (TextView) convertView.findViewById(R.id.button_text);
            holder.form_details.setOnClickListener(new OnClickListener(){
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    System.out.println(pos);
                                   //Here i am able to get clicked view but pos has always 
                    // last value
                    System.out.println("button view clicked for "+cipt_list.get(pos).cipt);
                }});
            System.out.println(holder.form_name);
            convertView.setTag(holder);
        }
        else{
            holder = (Holder) convertView.getTag();
        }
        ciptDetails cipt = cipt_list.get(position);
        holder.form_name.setText(cipt.cipt);
        return convertView;
    }

2个回答

CSDN_Ask
CSDN_Ask   2013.04.09 16:57
已采纳

在点击监听器前设置:

holder.form_details.setId(position);

在 onClick 方法中使用 v.getId() 就会给出位置。

xiaoyan_12
xiaoyan_12   2013.04.17 17:03

一种方法,使用 OnItemClickListener

 list.setOnItemClickListener(new OnItemClickListener(){

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                long arg3) {

        }
    };

第二种,在 getView() 方法中获得位置,改成 "final int position",然后在 view's onClickListener() 中访问

public View getView(final int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    Holder holder = new Holder();
    pos = position;
     if(convertView == null)
    {
        System.out.println(position);
        convertView= inflater.inflate(R.layout.list_layout,(ViewGroup)parent.findViewById(R.layout.list_layout));

        holder.form_name  = (TextView) convertView.findViewById(R.id.list_text);
        holder.form_details = (TextView) convertView.findViewById(R.id.button_text);

        holder.form_details.setOnClickListener(new OnClickListener(){
            public void onClick(View v) {
                // you can access the position here
                System.out.println(pos);
                               //Here i am able to get clicked view but pos has always 
                // last value
                System.out.println("button view clicked for "+cipt_list.get(pos).cipt);
            }});
        System.out.println(holder.form_name);
        convertView.setTag(holder);
    }
    else{
        holder = (Holder) convertView.getTag();
    }
    ciptDetails cipt = cipt_list.get(position);
    holder.form_name.setText(cipt.cipt);
    return convertView;
 }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android ListView的Item中的子view共存、抢夺焦点问题
Android ListView的Item中的子view共存、抢夺焦点问题
React Native获取ListView上row的点击TouchableOpacity获取其ref
_renderRow(){    return(                      TouchableOpacity ref={touchImage => this.touchImage =touchImage} onPress={this.}>                  //在renderRow里面我们无法获取Image的ref所以我们将ref设为他的父容器Tou
Listview点击事件失效问题解决以及每个Item 子控件获取focus
最近在写一个开源的播放器,碰到了一问题,就是listview在自定义item的内容之后点击出现无效,后来才发现原来是因为当item里面包含了子控件,例如TextView、Button等之后,子控件会优先获得Focus焦点导致了父控件获取不到,所以我们必须要对其进行设置。 1、解决listview设置的OnItemClickListener()无效。 我们会发现在ListView中有一个属性desc
ListView的item点击事件及item中子view的点击事件冲突处理方法和思路
如题,这种情况出现的情景是很常见的,要想它们互不冲突,我的处理思路如下: 1. 因为listview是一个viewgroup,在自定义的listview的item布局(layout_items.xml)中的根节点中添加下面一行就好了。 android:descendantFocusability=“blockDescents” 2.在item里的子view中添加属性如下。 and
ListView子控件获取焦点问题
android:descendantFocusability用法简析     开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了,可能会发生点击每一个item的时候没有反应,无法获取的焦点。原因多半是由于在你自己定义的Item中存在诸如Imag
菜鸟学android——获取listview某个item的view对象
网上查了查,发现这个问题很冷门,可现在又有这个需求,只好自己摸索一下了
Android实现ListView显示信息,点击每个item,跳转到相应界面
界面如下:(做这个目的仅仅是为了学习一点小知识,因为自己才刚开始) 实现的方法比较简单,就是定义一个ListView,然后设置监听,ListView对每个条目的监听是setOnItemClickListener。onItemClick(AdapterView parent, View view, int position, long id)这段代码中,
list中按钮点击事件在activity中处理
如果listview中有按钮,点击事件可以写到adapter中,但是你想写到avtivity中,发现以前遇到过。利用接口回调可以实现list中按钮点击事件在activity中处理。
获取listview某个item的view对象
首先说,listview有个getChildAt(int position)的方法,但是这个方法只计算可视的item,也就是说position只是从第一个可以看到的item算起的,这样就和实际获取的position是不一样的。 直接说解决方法吧: [html] view plaincopy listview.getChildAt(position-
android listview中按钮点击怎样获取到那条选中listItem的position
你的按钮是在 public View getView(final int position, View convertView, ViewGroup parent) 中构建的吗?  position设置为final  直接在点击事件里用这个position 就可以 直接把上面的position传进去就可以。