当前位置: 首页 > 知识库问答 >
问题:

操作栏主页按钮崩溃,而后退按钮工作

郜卓君
2023-03-14

我在这件事上完全被难住了。我有一个活动C,当我试着按下后退按钮时,它工作了。但是,当我使用操作栏中的home/up按钮时,它就会崩溃(请参见下面的错误)。下面是我的代码中处理备份/备份按钮的部分。

活动C:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_offline_viewer);
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
}

    @Override
public boolean onPrepareOptionsMenu(Menu menu) {
    if(!isOnline) {
        menu.removeItem(R.id.saveRoute);
    }
    return true;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.offline_viewer, menu);
    return true;
}

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

@Override
public boolean onOptionsItemSelected(MenuItem item)
{       
    //Get names for saving
    String[] startParts = onlineFrom.split(",");
    String startName = startParts[0] + "," + startParts[1]; 
    String[] endParts = onlineTo.split(",");
    String endName = endParts[0] + "," + endParts[1]; 
    System.out.println(item.getItemId());
    switch(item.getItemId()){
    //Save xml file or route once pressed
    case R.id.saveRoute:
        //TODO:Uncomment once server is ready
        new DownloadFileFromURL(this, startName, endName).execute(urlForDownload);
        return true;       
    case android.R.id.home: 
        System.out.println(item.getItemId());
        onBackPressed();
        return true;
    }

    return super.onOptionsItemSelected(item);
}

错误:

08-22 16:15:43.629: W/dalvikvm(4908): threadid=1: thread exiting with uncaught exception     (group=0x41c7e888)
08-22 16:15:43.634: E/AndroidRuntime(4908): FATAL EXCEPTION: main
08-22 16:15:43.634: E/AndroidRuntime(4908): java.lang.NullPointerException
08-22 16:15:43.634: E/AndroidRuntime(4908):     at     com.example.otpxmlgetter.OfflineViewer.onOptionsItemSelected(OfflineViewer.java:185)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at android.app.Activity.onMenuItemSelected(Activity.java:2590)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:361)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at com.android.internal.widget.ActionBarView$3.onClick(ActionBarView.java:167)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at android.view.View.performClick(View.java:4204)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at android.view.View$PerformClick.run(View.java:17354)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at android.os.Handler.handleCallback(Handler.java:725)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at android.os.Looper.loop(Looper.java:137)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at android.app.ActivityThread.main(ActivityThread.java:5232)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at java.lang.reflect.Method.invokeNative(Native Method)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at java.lang.reflect.Method.invoke(Method.java:511)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561)
08-22 16:15:43.634: E/AndroidRuntime(4908):     at dalvik.system.NativeStart.main(Native Method)

这是否与到达活动C有两种可能的方式有关?要么是-

共有1个答案

韦熙云
2023-03-14

通常不建议调用活动生命周期方法。框架使用的onwhich方法。如果你想完成活动,而不是使用。。。

this.finish()

getActivity.finish()

如果您处于片段上下文中。

p. s:onBackPmed实际上是工作的(反对这个答案的初始假设)。有关此问题的根本原因,请参阅下面的评论。

P. S.:这篇文章提出了this.dispatch关键事件(新的关键事件(关键事件。ACTION_DOWN,关键事件。KEYCODE_BACK));作为替代

 类似资料:
  • 在这些Android文档的帮助下。我正在尝试做一个操作栏后退按钮。我得到一个操作栏后退按钮,如下图: 输出: 但我的问题是在看了画廊的图片后,我按下了动作栏后退按钮。 然后它不工作了。但它必须回到上一页。 下面列出了代码。 厨房活动。java: GalleryDetailFragment。java: 如果你知道如何解决这些问题,任何人都可以帮助我。谢谢你。

  • 我正在尝试在上显示一个以将上一页/活动移动到主页面(第一次打开)。我做不到。 我的代码。 代码在中。

  • 问题内容: 如何在自己的应用程序中复制此功能? 我认为肯定有三种可能性… 捕获后退按钮的按下(如下所示),然后调用home按钮调用的任何方法。 捕获后退按钮按下,然后欺骗主页按钮。 捕获后退按钮的按下,然后启动主屏幕的活动,从而有效地将应用程序的活动置于停止状态。 编辑: 我知道有关服务,并且正在与此问题相关的应用程序中使用一种。该问题专门用于在按“后退”按钮时将活动置于停止状态而不是已破坏状态。

  • 问题内容: 我想在操作栏中自定义活动后退按钮,而不是在硬键后退按钮中自定义。我已经重写了该方法。它可以与我的模拟器后退按钮一起使用,但不能与操作栏后退按钮一起使用。 我希望它与操作栏一起发生。我怎样才能做到这一点? 这是我的代码: 我已经用了这个祝酒,无论是否按回去都可以,但是实际的实现方式有所变化,例如想回到上一个活动。但这不适用于操作栏顶部的按钮(活动标题除外)。 请任何人可以指定我这个问题。

  • 我想自定义操作栏中的“活动后退”按钮,而不是硬键后退按钮。我已经重写了onBackPressed()方法。它适用于我的emulator back按钮,但不适用于action bar back按钮。 我希望它发生在动作栏上。我该怎么做? 这是我的代码: 我已经使用了这个祝酒词,不管后退是否有效,但是实际的实现变化喜欢移动回以前的活动。但是这不适用于操作栏顶部的按钮(除了活动标题)。 请任何人都可以指