我的Android应用程序具有以下活动流程
列表 - >购买 - >卖 从列表中单击/选择项目时,将id传递给buy以从服务器提取相关数据。如果用户拥有某个项目,那么购买屏幕也会有一个卖出选项(这也是所述项目的概述)。
我面临的问题是,当您在销售屏幕上并按下Android后退按钮时,您将被带回原始状态的购买屏幕,但是当您单击活动中的后退箭头(向上)时工具栏,似乎它实际上是尝试启动一个新活动并抛出一个异常(因为活动无法知道id是什么)。买入活动被列为清单中卖出活动的父母。
我需要以某种方式使up按钮的行为与此特定活动的后退按钮相同,或者至少以某种方式将id传回。
任何建议将不胜感激。
答案 0 :(得分:2)
如果您正在使用ActionBar
(平台或AppCompat),请在您希望返回的活动中覆盖以下方法。
@Override
public boolean onOptionsItemSelected(@NonNull final MenuItem item) {
final int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
在您的简单导航层次结构中使用它应该是安全的。
答案 1 :(得分:1)
就在昨天我为我的应用做了这个。这就是我所做的:
在manifest
文件中我删除了
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.app.MainActivity" />
是我DetailsActivity
的一部分。
在DetailsActivity
我将此行添加到onCreate
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
并在onOptionsItemSelected()
方法中添加了这些行
if (item.getItemId() == android.R.id.home) {
onBackPressed();
}
不确定这是否是处理此问题的最佳方法,但是它确实有效:)
答案 2 :(得分:1)
在您的活动中,onOptionsItemSelected()
方法获取点击的项id
,如果id
为android.R.id.home
,则为finish()
当前活动。
试试这个:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch(item.getItemId())
{
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}