Android 从listview捕获onClick事件时出错

Android 从listview捕获onClick事件时出错,android,listview,onclicklistener,listactivity,simplecursoradapter,Android,Listview,Onclicklistener,Listactivity,Simplecursoradapter,我通过editText向我的用户请求邮政编码,然后我使用一个按钮,使用SimpleCorsorAdapter在listView中获取和显示存储位置 现在,我希望能够通过在listView中选择一个项目并传递一些字符串信息来启动一个新的活动 我无法让onClickListener注册我的单击 是否因为我使用的是活动而不是ListActivity 我希望输入(编辑文本)和结果(列表视图)都在同一个活动中 活动项目: <LinearLayout xmlns:android="http://sch

我通过editText向我的用户请求邮政编码,然后我使用一个按钮,使用SimpleCorsorAdapter在listView中获取和显示存储位置

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

我无法让onClickListener注册我的单击

是否因为我使用的是活动而不是ListActivity

我希望输入(编辑文本)和结果(列表视图)都在同一个活动中

活动项目:

<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>

斯托克罗大学组:

<?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();
            }
        }
    }
导入android.app.Activity;
导入android.database.Cursor;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.EditText;
导入android.widget.ListView;
导入android.widget.SimpleCursorAdapter;
导入android.widget.Toast;
公共类PostCodeEntryActivity扩展活动{
私人MyDatabase stockistsDB;
公共编辑文本输入代码;
私有列表视图列表视图;
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u pcentry);
stockistsDB=新的MyDatabase(此数据库);
}
公共void DoPostSearch(视图五){
enteredCode=(EditText)findViewById(R.id.etPostCode);
字符串postalCode=enteredCode.getText().toString();
游标结果=StockIstDB.GetStockIstFromPostcode(postalCode);
if(results!=null&&results.getCount()>0){
SimpleCrsorAdapter=新的SimpleCrsorAdapter(此,
R.layout.stockrow_集团,
结果,新字符串[]{“fld_BranchName”、“fld_邮政编码”、“fld_电话”},
新int[]{R.id.branch,R.id.post,R.id.telephone},
0);
listView=(listView)findViewById(R.id.list);
setOnItemClickListener(新的android.widget.AdapterView.OnItemClickListener()
{
@凌驾
公共链接(AdapterView arg0、视图arg1、,
整数arg2,长arg3){
Toast.makeText(PostCodeEntryActivity.this,“Clicked”,Toast.LENGTH_SHORT.show();
}
});
setAdapter(适配器);
}否则{
Toast.makeText(PostCodeEntryActivity.this,“未找到结果,请检查您的邮政编码”,Toast.LENGTH_SHORT.show();
}
}
}

行本身是否有可单击的元素?请从R.layout.stockrow_组发布XML

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

android:focusable="false"
android:focusableInTouchMode="false"
这将确保对列表项的单击不会被行本身上的可单击项阻止

实际解决方案:

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

android:clickable="true"

行本身是否有可单击的元素?请从R.layout.stockrow_组发布XML

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

android:focusable="false"
android:focusableInTouchMode="false"
这将确保对列表项的单击不会被行本身上的可单击项阻止

实际解决方案:

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

android:clickable="true"
  • 在活动中实施
    AdapterView.onItemClickListener
    `
  • 改变

    listView.setOnItemClickListener(新的android.widget.AdapterView.OnItemClickListener()

    listView.setOnItemClickListener(此)

  • 添加未实现的方法

  • 在活动中实施
    AdapterView.onItemClickListener
    `
  • 改变

    listView.setOnItemClickListener(新的android.widget.AdapterView.OnItemClickListener()

    listView.setOnItemClickListener(此)

  • 添加未实现的方法


  • 你可以发布
    stockrow_group.xml
    我的错误,从一开始就应该包含在内。你可以发布
    stockrow_group.xml
    我的错误,从一开始就应该包含在内。现在不是,但计划是在行中添加一个imagebutton并启动映射。我在上面添加了缺少的xml。如果删除
    android:c会发生什么lickable=“true”
    来自stockrow\u组的LinearLayout?你知道这确实是一些小事情。非常感谢。在快速搜索时,android:clickable=“true”注册一个空的onClickListener。有关详细信息,请参阅。没问题。我已使用解决方案更新了答案。目前还没有,但计划是在行中添加一个imagebutton并启动映射。我已添加了上面缺少的xml。如果删除
    android:clickable=“true”,会发生什么情况
    来自stockrow_组中的LinearLayout?你知道这确实是一些小事情。非常感谢。在快速搜索时,android:clickable=“true”注册一个空的onClickListener。有关详细信息,请参阅。没问题。我已经用解决方案更新了我的答案。我很确定我以前尝试过这个,但我会再试一次。不,它仍然不会启动。在调试模式下也没有注册。我的editText可以保持焦点吗?我很确定我以前尝试过这个,但我会再试一次.不,它仍然没有启动。在调试模式下也没有任何注册。C