我有3个活动活动A,活动B和活动C.我将活动A中的意图传递给活动B并带有一些值。活动B正在接收它而没有任何问题。但是当我从活动C的onBackPress()
启动活动B时会出现问题。我已经覆盖了活动C中的 public void onClick(View view) {
Intent i = new Intent(this, ActivityB.class);
i.putExtra("artist_id", artistsModel.getArtistID());
aContext.startActivity(i);
}
并将意图代码放在那里。我只想从活动C开始活动B而不传递任何意图的额外值。但是当我按下后退按钮时,它给了我NPE,因为活动B中的意图没有收到任何值。如何解决这个问题?
基本上我需要的是活动B中的意图应该从活动A而不是活动C接收值。
活动A:
ArtistId = getIntent().getExtras().getLong("artist_id");
public void onClick(View view) {
Intent intent1 = new Intent(getApplicationContext(),ActivityC.class);
intent1.putExtra("ArtistIDs", ArtistId );
startActivity(intent1);
}
活动B:
public void onBackPressed() {
Intent i = new Intent(this , ActivityB.class);
startActivity(i);
}
活动C:
{{1}}
答案 0 :(得分:0)
如果您想忽略Intent
用户来自C,那么在onCreate
的Activity中将您的逻辑更改为:
Intent intent=getIntent();
if(intent.hasExtra("artist_id")){
ArtistId=intent.getExtras().getLong("artist_id");
}else{
ArtistId=0;
}
它的作用是检查意图是否具有名称为"artist_id"
的额外,如果true
将其分配给ArtistId
,则ArtistId
变为零。
答案 1 :(得分:0)
从活动C中删除代码:
public void onBackPressed() {
// Intent code or don't
}
在这种情况下,如果您尚未完成活动B ,您的活动B 将会恢复否则您必须为意图的代码启动<来自活动C 的强>活动B 。
答案 2 :(得分:0)
只需对.scroll {
position: relative;
}
.scroll nav {
display: flex;
flex-wrap: nowrap;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
position: relative;
}
.scroll:after { /* This is our indicator give it your custom style */
content: ">>";
position: absolute;
width: 20px;
right: 0;
top: 0;
color: #fff;
padding: 0 10px;
background: #333;
}
.item {
flex: 1 1 auto;
padding-right: 10px;
background: #fff;
}
.item:last-child {
position: relative;
z-index: 9; /* higher z-index to get it above the indicator */
}
getExtras()
添加空检查即可。
您收到ArtistId
,因为NullPointerException
为getExtras()
并且您正在尝试从中检索长数据。
所以解决方案是
null
如果我们在附加内容中找不到此密钥,我也会if(getIntent().getExtras() != null) {
ArtistId = getIntent().getExtras().getLong("artist_id", 0);
}
将默认值设为getLong("artist_id, 0)
答案 3 :(得分:0)
ok活动 - 代码没问题,但是在Activity-C onBackPressed()而不是使用此代码
public void onBackPressed() {
Intent i = new Intent(this , ActivityB.class);
startActivity(i);
}
使用此
public void onBackPressed() {
Intent i = new Intent();
setResult(RESULT_OK);
finish();
}
和onClick中的Activity-B类
Intent intent1 = new Intent(getApplicationContext(),ActivityC.class);
intent1.putExtra("ArtistIDs", ArtistId );
startActivityforResult(intent1, 1);
并覆盖@Override onActivityResult方法
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode == 1 && resultCode == RESULT_OK){
// doAnything after back from activity-c or do't do anything
}
}
我希望这有帮助并解决您的问题