无法从listview捕获onClick事件

时间:2014-01-06 12:33:47

标签: android listview onclicklistener listactivity simplecursoradapter

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

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

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

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

我宁愿在同一个活动中同时拥有输入(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();
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

你自己在行上有可点击的元素吗?请从R.layout.stockrow_group发布XML。

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

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

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

实际解决方案:

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

android:clickable="true"

答案 1 :(得分:1)

  1. 在您的活动中实施AdapterView.onItemClickListener
  2. 更改

    listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener()

    listView.setOnItemClickListener(this)

  3. 添加未实现的方法