android - 无法从 ListView 捕获 onClick 事件

标签 android listview onclicklistener listactivity simplecursoradapter

我通过 editText 向我的用户询问邮政编码,然后我使用一个按钮来使用 simpleCursorAdapter 在 listView 中获取和显示商店位置。

现在我希望能够通过在 listView 中选择一个项目并传递一些字符串信息来启动一个新 Activity 。

我无法让 onClickListener 注册我的点击。

是因为我使用的是 Activity 而不是 ListActivity 吗?

我宁愿在同一 Activity 中同时拥有输入(EditText)和结果(ListView)。

activity_pcentry:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/enter_post" />

    <EditText
        android:id="@+id/etPostCode"
        android:imeOptions="actionSearch"
        android:inputType="textCapCharacters"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:ems="10" >
        <requestFocus />
    </EditText>

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/search_button"
        android:onClick="DoPostSearch" />

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>

</LinearLayout>

stockrow_group:

<?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="match_parent"
    android:clickable="true"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/branch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" >
    </TextView>

    <TextView
        android:id="@+id/post"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" >
    </TextView>

    <TextView
        android:id="@+id/telephone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="" >
    </TextView>


</LinearLayout>

PostCodeEntryActivity.java:

import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;    

public class PostCodeEntryActivity extends Activity{

        private MyDatabase stockistsDB;
        public EditText enteredCode;
        private ListView listView;

        @Override
        public void onCreate(Bundle savedInstanceState){
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_pcentry);
            stockistsDB = new MyDatabase(this);
        }


        public void DoPostSearch(View v) {

            enteredCode = (EditText)findViewById(R.id.etPostCode);
            String postalCode = enteredCode.getText().toString();
            Cursor results = stockistsDB.getStockistsFromPostCode(postalCode);

            if (results != null && results.getCount() > 0) {
                SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,
                        R.layout.stockrow_group,
                        results, new String[]{"fld_BranchName","fld_PostCode","fld_Tel"},
                        new int[]{R.id.branch,R.id.post,R.id.telephone},
                        0);

                listView = (ListView)findViewById(R.id.list);
                listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener()
                {
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1,
                            int arg2, long arg3) {
                        Toast.makeText(PostCodeEntryActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
                    }
                });
                listView.setAdapter(adapter);


            } else {
                Toast.makeText(PostCodeEntryActivity.this, "No results found, please check your postcode", Toast.LENGTH_SHORT).show();
            }
        }
    }

最佳答案

行本身是否有任何可点击的元素?请发布来自 R.layout.stockrow_group 的 XML。

例如,如果您在该布局上有按钮,您可能需要向这些按钮添加以下内容:

android:focusable="false"
android:focusableInTouchMode="false"

这将确保对列表项的点击不会被行本身上的可点击项阻止。

实际解决方案:

不要使 ListView 的行可点击。这将通过注册一个空的点击处理程序来“吃掉”点击事件。从 ListView 的行中删除以下行:

android:clickable="true"

关于android - 无法从 ListView 捕获 onClick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20950124/

相关文章:

android - 如何在路线谷歌地图v2 android上绘制交互式折线

java - 将每个 ID 的数据从 firebase 读取到 spinner 中

android - Android 中如何减小视频大小?

Android ADT Eclipse : com. android.common 和 com.android.ex 导入无法解析

Android 列表选择器在使用 Theme.Light 时卡住

java - 自定义适配器未在 ListView 上显示任何数据

android - 如何通过部分着色背景在 ListView 中制作进度指示器?

java - 为什么 onClickListener 在我启动应用程序时会使它崩溃?

java - 通过单击 ListView 内的按钮从自定义 ListView 获取/存储特定数据

android - 有没有办法将 OnClickListener 重置为其默认的 Android 实现?