意图从一个两个活动到一个

时间:2017-11-12 10:45:13

标签: android android-intent

我有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}}

4 个答案:

答案 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,因为NullPointerExceptiongetExtras()并且您正在尝试从中检索长数据。

所以解决方案是

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

我希望这有帮助并解决您的问题