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);
    }