应用崩溃中的Android后退操作按钮结果

时间:2013-09-13 08:21:18

标签: java android back-button

我正在构建一个由3个活动组成的新应用程序,即:   - 启动画面   - 活动A.   - 活动B,和   - 活动C

来自活动用户可以进行以下两项活动:

A - > B - > C(来自行为A用户可以转到B然后转到C)。 A - > C(来自行为A用户可以直接进入C)。 B - > C(来自B用户可以转到C)。

我还在活动之间传递Serializable intent Extra。

我遇到的问题是每当我按下操作栏(左上角)上的后退按钮时,它总会让我的应用程序崩溃(错误:NULL指针异常)。

我试图将此代码放在我的所有活动上。

@Override
public void onBackPressed() {
    this.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
}

我尝试以某种方式模仿物理后退按钮行为,因为当用户按下物理后退按钮时它正在工作。但也有点抛出错误。

public void onBackPressed(){
  super.onBackPressed();
}

或者(好吧这个字面意思重新启动应用程序,因为它从启动画面重新启动应用程序,所以不鼓励这样做。)

public void onBackPressed(){
  super.onBackPressed();
  finish();
}

有谁知道实施后退按钮的适当方法?

4 个答案:

答案 0 :(得分:7)

左上角的按钮不是“后退”按钮,它是“向上”按钮,它只是操作栏中的一个按钮,onBackPressed指的是按下的硬件后退按钮。 使用back和up的导航不一定相同(“返回”意味着转到我之前的位置,而“up”意味着转到应用层次结构中的上层)。 有关详细信息,请查看http://developer.android.com/design/patterns/navigation.html

(另外,尽量避免启动画面,他们在Android设计模式中非常气馁)

编辑:我忘了提及如何实际处理“向上”按钮。您可以在活动的onOptionsItemSelected:

上执行此操作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        // Handle "up" button behavior here.
        return true;
    } else {
        // handle other items here
    }
    // return true if you handled the button click, otherwise return false.
}

答案 1 :(得分:1)

我认为,问题在于使用意图传递价值。 如果该值旨在供您的所有活动使用,我认为最好的方法 是使用共享偏好。

答案 2 :(得分:1)

如果你使用的是16级或更高级别的API,真的不需要做任何事情,                                                                                         我只是找到解决方案: 清单文件中包含所有其他活动除了MainActivity添加元数据,如下所示:

        android:name="android.support.PARENT_ACTIVITY"

        android:value="com.gsetia.ohama.MainActivity"/>

在像这样的活动中,例如

         <activity
                      android:name=".ViewReports"
                      android:label="@string/title_activity_view_reports"
                      android:parentActivityName=".MainActivity"
                      android:theme="@style/AppTheme" >

                     <meta-data
                     android:name="android.support.PARENT_ACTIVITY"
                     android:value="com.gsetia.ohama.MainActivity"/>

    </activity>

在最后,删除公共布尔值onOptionsItemSelected(MenuItem item)方法。那就是它。

你会找到你的后退按钮,并且可以正常工作

答案 3 :(得分:0)

当调用后退按钮时,你可以这样做

public void onBackPressed(){
    // Add data to your intent
    finish();
    startActivity(intent);
}

您的onClick方法与您的操作栏按钮类似。