有向上按钮的行为与Android后退按钮

时间:2017-05-18 17:39:36

标签: android

我的Android应用程序具有以下活动流程

列表 - >购买 - >卖 从列表中单击/选择项目时,将id传递给buy以从服务器提取相关数据。如果用户拥有某个项目,那么购买屏幕也会有一个卖出选项(这也是所述项目的概述)。

我面临的问题是,当您在销售屏幕上并按下Android后退按钮时,您将被带回原始状态的购买屏幕,但是当您单击活动中的后退箭头(向上)时工具栏,似乎它实际上是尝试启动一个新活动并抛出一个异常(因为活动无法知道id是什么)。买入活动被列为清单中卖出活动的父母。

我需要以某种方式使up按钮的行为与此特定活动的后退按钮相同,或者至少以某种方式将id传回。

任何建议将不胜感激。

3 个答案:

答案 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,如果idandroid.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);

    }
}