我正在使用以下代码在工具栏中实现后退按钮。
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String seriesLeagueId = String.valueOf( getIntent().getStringExtra( "seriesLeagueId" ) );
String seriesBowlerId = String.valueOf( getIntent().getIntExtra( "seriesBowlerId", 2 ) );
String seriesSeriesId = String.valueOf( getIntent().getIntExtra( "seriesSeriesId", 2 ) );
Intent intent=new Intent();
intent.putExtra("seriesLeagueId",seriesLeagueId);
intent.putExtra("seriesBowlerId",seriesBowlerId);
intent.putExtra("seriesSeriesId", seriesSeriesId);
setResult(1,intent);
Log.d("PASSING SERIES_ID BACK","Series Id = >>>>" + seriesSeriesId + "<<<<");
Log.d("PASSING BOWLER_ID BACK","Bowler Id = >>>>" + seriesBowlerId + "<<<<");
Log.d("PASSING LEAGUE_ID BACK","League Id = >>>>" + seriesLeagueId + "<<<<");
finish();//finishing activity
}
});
当我使用物理后退按钮时,应用程序崩溃了,Logcat告诉我以下内容:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Intent.getStringExtra(java.lang.String)' on a null object reference
at ca.rvogl.tpbcui.views.SeriesActivity.onActivityResult(SeriesActivity.java:393)
Java第393行如下:
String savedLeagueId=data.getStringExtra("seriesLeagueId");
但是据我所知,这行没有错。这也是它所属的代码。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
//Check If Request Code Is The Same As What Is Passed - Here It Is 1
if(requestCode==1)
{
String savedLeagueId=data.getStringExtra("seriesLeagueId");
String savedBowlerId=data.getStringExtra("seriesBowlerId");
seriesList.addAll( db.getAllSeries( savedLeagueId, savedBowlerId ) );
}
}
现在,如果我删除第一个代码段中的 finish(),则物理后退按钮可以正常工作,但工具栏的后退按钮不能正常工作,显然是因为它没有完成。当我进行调试时,我可以看到seriesLeagueId = NULL。但是,仅当按下物理后退按钮时。
任何人都可以提供有关此问题的一些见识。
onBackPressed代码
@Override
public void onBackPressed() {
String seriesLeagueId = String.valueOf( getIntent().getStringExtra( "seriesLeagueId" ) );
String seriesBowlerId = String.valueOf( getIntent().getIntExtra( "seriesBowlerId", 2 ) );
Intent intent=new Intent();
intent.putExtra("seriesLeagueId",seriesLeagueId);
intent.putExtra("seriesBowlerId",seriesBowlerId);
setResult(1,intent);
finish();//finishing activity
overridePendingTransition(0, 0);
}
答案 0 :(得分:2)
这是工具栏按钮动作为navigate up on the stack
而返回按钮动作为return back in the stack
的设计决定。
https://developer.android.com/training/implementing-navigation/ancestral
因此NavigateUp的默认实现是使用NEW_TASK标志启动父活动,而返回按钮则将当前活动完成()。
据我所知,每个人都覆盖工具栏上的按钮,使其完全像返回按钮一样。
在您的情况下,请覆盖onBackPressed以处理后退按钮以及导航按钮。