Android onItemClick 方法不适用于 0 以外的 id 项
Posted
技术标签:
【中文标题】Android onItemClick 方法不适用于 0 以外的 id 项【英文标题】:Android onItemClick method not working for item of ids other than 0 【发布时间】:2021-05-23 04:09:34 【问题描述】:我在 android 中的 onItemClick 方法有问题。 我知道其他人也遇到过这样的问题,在 SO 上找到了他们问题的一些参考资料,阅读了提供的答案和互联网上的其他一些文章,但没有帮助。就我而言,情况似乎有些不同。
我有一些对象的列表视图,我想在单击它们时显示它们的详细信息。但尴尬的是,监听器只对列表视图的第一个对象工作正常。当我单击列表视图的其他元素时,该应用程序不断中止。我不知道发生了什么事。 当我使用 id 来检索对象时,我尝试通过位置更改 id,这也不起作用。
这是我的活动(DrinkCategoryActivity)中 onCreate 方法的代码
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drink_category);
ArrayAdapter<Drink> listAdapter = new ArrayAdapter<>(
this, android.R.layout.simple_list_item_1, Drink.drinks
);
ListView listDrinks = (ListView) findViewById(R.id.list_drinks);
listDrinks.setAdapter(listAdapter);
AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener()
public void onItemClick(AdapterView<?> listDrinks,
View itemView, int position, long id)
Intent intent = new Intent(DrinkCategoryActivity.this, DrinkActivity.class);
intent.putExtra(DrinkActivity.EXTRA_DRINKID, (int) id);
startActivity(intent);
;
listDrinks.setOnItemClickListener(itemClickListener);
我的 DrinkActivity(在列表视图中单击时应该向我显示每个 Drink 对象的详细信息)的 onCreate 方法代码如下所示
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drink);
int drinkId = (int) getIntent().getExtras().get(EXTRA_DRINKID);
Drink drinkItem = Drink.drinks[drinkId];
ImageView image = (ImageView) findViewById(R.id.drink_image);
image.setImageResource(drinkItem.getImageResourceId());
TextView drink_name = (TextView) findViewById(R.id.drink_name);
drink_name.setText(drinkItem.getName());
TextView drink_description = (TextView) findViewById(R.id.drink_description);
drink_description.setText(drinkItem.getDescription());
TextView drink_price = (TextView) findViewById(R.id.drink_price);
String price = ""+drinkItem.getPrice();
drink_price.setText(price);
我不知道xml文件是否有问题,所以他们在这里:
activity_drink_category.xml 在下面
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
tools:context=".activities.DrinkCategoryActivity">
<LinearLayout
android:layout_
android:layout_
android:orientation="vertical">
<include
layout="@layout/customer_screen_toolbar_layout"/>
<ListView
android:layout_marginTop="10dp"
android:id="@+id/list_drinks"
android:gravity="center"
android:layout_
android:layout_ />
</LinearLayout>
</androidx.drawerlayout.widget.DrawerLayout>
activity_drink.xml 放在这里
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:orientation="vertical"
tools:context=".activities.DrinkActivity">
<include
layout="@layout/customer_screen_toolbar_layout"/>
<ImageView
android:id="@+id/drink_image"
android:layout_
android:layout_ />
<TextView
android:id="@+id/drink_name"
android:layout_
android:layout_/>
<TextView
android:id="@+id/drink_description"
android:layout_
android:layout_/>
<TextView
android:id="@+id/drink_price"
android:layout_
android:layout_
android:gravity="center"
android:background="#EB8E13"
android:textColor="@color/white" />
</LinearLayout>
任何帮助都会很有价值。提前致谢
【问题讨论】:
“当我单击列表视图的其他元素时应用程序不断中止”是什么意思? 我的意思是应用程序突然停止并显示此消息:应用程序已停止。再次打开应用 【参考方案1】:您需要在 Intent 中传递“Position”而不是“id”。正如您在上面描述的那样,它在第一个位置上效果很好。然后你需要使用 position
intent.putExtra(DrinkActivity.EXTRA_DRINKID, (int) position);
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_drink_category);
ArrayAdapter<Drink> listAdapter = new ArrayAdapter<>(
this, android.R.layout.simple_list_item_1, Drink.drinks
);
ListView listDrinks = (ListView) findViewById(R.id.list_drinks);
listDrinks.setAdapter(listAdapter);
AdapterView.OnItemClickListener itemClickListener = new AdapterView.OnItemClickListener()
public void onItemClick(AdapterView<?> listDrinks,
View itemView, int position, long id)
Intent intent = new Intent(DrinkCategoryActivity.this, DrinkActivity.class);
intent.putExtra(DrinkActivity.EXTRA_DRINKID, (int) position);
startActivity(intent);
;
listDrinks.setOnItemClickListener(itemClickListener);
【讨论】:
感谢@VishalSojitra 的及时答复! 按您所说的尝试了位置,但问题仍然存在。应用突然停止并弹出:应用已停止,再次打开应用以上是关于Android onItemClick 方法不适用于 0 以外的 id 项的主要内容,如果未能解决你的问题,请参考以下文章
Android ListView onItemClick Not Work
Android:带按钮的 ListView -> OnItemClick 啥都不做
java Android Activity + onItemClicker(示例)