我在这件事上完全被难住了。我有一个活动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有两种可能的方式有关?要么是-
通常不建议调用活动生命周期方法。框架使用的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按钮。 我希望它发生在动作栏上。我该怎么做? 这是我的代码: 我已经使用了这个祝酒词,不管后退是否有效,但是实际的实现变化喜欢移动回以前的活动。但是这不适用于操作栏顶部的按钮(除了活动标题)。 请任何人都可以指