Java 为什么';t物理后退按钮的工作原理与应用程序后退按钮相同
我正在使用以下代码实现工具栏中的“后退”按钮Java 为什么';t物理后退按钮的工作原理与应用程序后退按钮相同,java,android,android-intent,Java,Android,Android Intent,我正在使用以下代码实现工具栏中的“后退”按钮 toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String seriesLeagueId = String.valueOf( getIntent().getStringExtra( "seriesLeague
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
}
});
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。但是,这仅在按下物理后退按钮时发生
谁能提供一些关于这个问题的见解
反压码
@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);
}
这是一个设计决策,工具栏按钮动作是
在堆栈上向上导航
,返回按钮动作是在堆栈中返回
因此,NavigateUp的默认实现是使用NEW_TASK标志启动父活动,而return按钮do finish()将启动当前活动
就我所见,每个人都会覆盖工具栏上的“向上”按钮,使其与“返回”按钮完全相同
在您的情况下,override on Backpress可处理后退按钮和导航按钮。这是工具栏按钮动作的设计决策,它是
在堆栈上向上导航
,返回按钮动作是在堆栈中返回
因此,NavigateUp的默认实现是使用NEW_TASK标志启动父活动,而return按钮do finish()将启动当前活动
就我所见,每个人都会覆盖工具栏上的“向上”按钮,使其与“返回”按钮完全相同
就你而言,覆盖OnBackpress以处理后退按钮以及导航按钮。您应该将
javascript
标记更改为java
标记或android
标记。您应该将javascript
标记更改为java
标记或android
标记。OnBackpress是否需要与工具栏后退按钮,以便将信息传递回上一个活动?是的,它确实。。。将所有代码提取到一个方法中,并在Backpressed和NavigationItemClickedWesome上调用相同的方法,这解决了问题。这是一个很好的答案,帮助我快速解决了问题。onBackPressed是否需要与工具栏back按钮具有相同的代码才能将信息传递回上一个活动?是的,它需要。。。将所有代码提取到一个方法中,并在Backpressed和NavigationItemClickedWesome上调用相同的方法,这解决了问题。这是一个很好的答案,帮助我很快解决了问题。
@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);
}