java - 简单 ListView onClick 中的按钮

标签 java android xml

所以我有一个简单的 ListView ,其中包含一个 TextView 和两个 ImageView 的列表项。 我希望两个 ImageView 都充当按钮。不幸的是,我什至无法让其中之一工作。 ListView 会加载,但当触摸任一图像时应用程序就会崩溃。这是列表项的 xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_card">
    <TextView
        android:layout_width="wrap_content" android:layout_height="wrap_content"
        android:textColor="@color/Black"
        android:id="@+id/name"
        android:textSize="20sp"
        android:padding="16dp">

    </TextView>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:gravity="right">
        <ImageView
            android:layout_width="40dp"
            android:layout_height="fill_parent"
            android:id="@+id/email"
            android:clickable="true"
            android:src="@drawable/ic_action_email"
            android:layout_margin="8dp"/>
        <View
            android:layout_width="2dp"
            android:layout_height="match_parent"
            android:background="@color/LightGrey" />
        <ImageView
            android:layout_width="40dp"
            android:layout_height="fill_parent"
            android:id="@+id/internet"
            android:clickable="true"
            android:layout_margin="8dp"
            android:src="@drawable/ic_action_web_site" />
        </LinearLayout>


</LinearLayout>

这是 ListView 的布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ListView
        android:id="@+id/lvDepartments"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:divider="@android:color/transparent"
        android:dividerHeight="8dp"
        android:padding="8dp"
        android:smoothScrollbar="true"
        android:scrollbarStyle="insideOverlay"
        android:listSelector="@color/Navy"/>
</LinearLayout>

相关的java代码如下:

      @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.staff_layout);        
    staffmemberlist = (ListView)findViewById(R.id.lvDepartments);
    ArrayAdapter<String> arrayAdapter =new ArrayAdapter<String>                                 (getApplicationContext(),R.layout.emailbrowsingcard,R.id.name, d);
    staffmemberlist.setAdapter(arrayAdapter);

    mailbutton=(ImageView)findViewById(R.id.email);
    mailbutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getApplicationContext(),
                "This line would appear on clicking this icon",
                Toast.LENGTH_LONG).show();
                    }
                });
}

最佳答案

这不会起作用,因为 ImageView 在项目列表中,所以你应该考虑这样做..

 mailButton = (ImageView) row.findViewById(R.id.email);

其中 row 是项目列表。请记住,ImageView 不在 Staff_layout 中,而是在您的 item_layout 中。

要使其正常工作,您需要移动此 block :

mailbutton=(ImageView)findViewById(R.id.email);
mailbutton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(getApplicationContext(),
            "This line would appear on clicking this icon",
            Toast.LENGTH_LONG).show();
                }
            });

到适配器类中的 getView()。并让 View 获取 findViewById 或拥有 item_layout View 的实例,以便访问按钮。

关于java - 简单 ListView onClick 中的按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20754390/

相关文章:

android - 视频屏幕被垂直拉伸(stretch)

java - 使用 jdom/dom4j 遍历 DOM,无需对命名空间了解太多

python - ElementTree的iterparse() XML解析错误

java - 无法获取在主机上上传的路径。 jsp

java - 1 到 100 之间的偶数(含 1 和 100)

java - JmDNS 未在 Raspberry 上发布

java - 提取第一个特殊字符后的字符串

android - 摄像头读取条码时自动检测并采集条码

android - 布局动画在第一次运行时不起作用

c++ - 使用 const 迭代器放置/删除属性树,或如何将 const_iterator 转换为迭代器