[英]Why Doesn't Physical Back Button Work The Same As The Application Back Button
我正在使用以下代码在工具栏中实现后退按钮。
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);
}
那是一个设计决定,因为工具栏按钮动作navigate up on the stack
,而返回按钮动作return back in the stack
。
https://developer.android.com/training/implementing-navigation/ancestral
因此,NavigateUp的默认实现是使用NEW_TASK标志启动父活动,而返回按钮则完成当前活动。
据我所知,每个人都覆盖工具栏上的按钮,使其完全像返回按钮一样。
在您的情况下,请覆盖onBackPressed以处理后退按钮以及导航按钮。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.