【问题标题】:Android: Get clicked view inside Listview itemAndroid:在Listview项目中获取点击视图
【发布时间】:2018-10-14 20:33:46
【问题描述】:

我阅读了很多线程并进行了很多测试,但没有成功。

在一个活动中,我有一个列表视图连接到 ResourceCursorAdapter 类型的适配器。

在适配器的方法(bindView)中,我定义了listview每一行的自定义布局。

每行有2个ImageButton、2个TextView和1个Checkbox:布局如下。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:orientation="horizontal"
    android:weightSum="100"
    tools:context=".Main"
    android:descendantFocusability="blocksDescendants">

    <CheckBox
        android:id="@+id/chebag"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="8" />

    <TextView
        android:id="@+id/texbag"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="68"
        android:gravity="left|center_vertical"
        android:lines="3"
        android:maxLines="3"
        android:text="Item"
        android:textSize="21sp" />

    <ImageButton
        android:id="@+id/butdec"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="6"
        android:background="@null"
        android:src="@drawable/meno" 
        android:clickable="false"/>

    <TextView
        android:id="@+id/texnum"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="12"
        android:gravity="center_vertical|center_horizontal"
        android:text="100"
        android:textSize="20sp" />

    <ImageButton
        android:id="@+id/butinc"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="6"
        android:background="@null"
        android:src="@drawable/piu"
        android:clickable="false" />

</LinearLayout>

在Activity中我准备了name(lismain)的listview的监听器;使用布局的语法每次点击 在列表项中触发方法(onItemClick)。

AdapterView.OnItemClickListener mainlistener=   new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> adapter, View view,final int position, long id) {


    }
};

lismain.setOnItemClickListener(mainlistener);       

我需要这两件事: a) 当在 (onItemClick) 我无法确定用户点击了哪个子视图 (行本身或里面的ImageButtons:有不同的处理)

b) 我更喜欢在 Activity 中而不是在适配器中处理点击事件:如果 ImageButtons 触发例如 (onClick) 方法也可以,但我也尝试不使用成功。

感谢支持

【问题讨论】:

标签: android listview


【解决方案1】:

感谢您的回答,但最后我通过此处的示例解决了问题: http://wiresareobsolete.com/2011/08/clickable-zones-in-listview-items/

链接的基本步骤是:

a) 列表视图的Adapter类是调用Activity的内部类。 例如,我们可以调用 Main Activity 类和 MyAdapter 类型为 Adapter 的类。

b) 列表视图的行布局中的 ImageButton 被称为 (butinc): 我们在方法(bindView)中调用butinc.setOnClickListener(Main.this)。

public class MyAdapter extends ResourceCursorAdapter {

    @Override
    public void bindView(View view, Context context, Cursor cursor) {

            ImageButton  butinc =   (ImageButton)   view.findViewById(R.id.butinc);

            butinc.setOnClickListener(Main.this);

        }

}

c) 当用户在 listview 行中按下 ImageButton 并在布局中设置正确的属性时, 比如android:clickable,点击在Mainactivity的OnClick方法中处理:

@Override
public void onClick (View v) {

    if(v.getId() == R.id.butinc) {

        // the code here handles the button click
    }
} 

d) 活动类例如声明为:

public class Pres extends AppCompatActivity implements View.OnClickListener {

// the Onclick method handles the interface View.OnClickListener

}

完成所有这些步骤后,按钮单击由 Activity 类型的类中的方法处理。

【讨论】:

  • 我在 XML 中为项目列表注册 onClick 事件并让它在活动中执行没有任何问题。但是有了参数View,你怎么做任何有用的事情。因为我不知道如何获取与该行关联的光标数据。 onItemClick() 事件至少作为相关数据的位置和 id,您可以使用 listView.getItemAtPosition(position) 获取 Cursor 行来访问数据。那么如何从 imageButton 的 onClick 事件中做一些有意义的事情呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-08
  • 2012-01-31
  • 1970-01-01
  • 2021-04-05
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多