繁体   English   中英

为什么物理后退按钮与应用程序后退按钮不一样

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM