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