gpt4 book ai didi

java - 为什么物理后退按钮与应用程序后退按钮的工作方式不同

转载 作者:行者123 更新时间:2023-12-02 02:00:21 24 4
gpt4 key购买 nike

我使用以下代码来实现工具栏中的后退按钮。

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

现在,如果我删除第一个 fragment 中的 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);
}

最佳答案

这是一个设计决策,工具栏按钮操作是在堆栈上向上导航,返回按钮操作是返回堆栈

https://developer.android.com/training/implementing-navigation/ancestral

因此,NavigateUp 的默认实现是使用 NEW_TASK 标志启动父 Activity ,而返回按钮则完成当前 Activity 。

据我所知,每个人都会覆盖工具栏向上按钮以使其完全充当返回按钮。

在您的情况下,重写 onBackPressed 来处理后退按钮以及导航按钮。

关于java - 为什么物理后退按钮与应用程序后退按钮的工作方式不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51678013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com