如何将值从一个活动传递给其他人(不要导航到其他人)

时间:2016-10-18 04:35:42

标签: android

来自我的第一项活动

musicGroup = (RadioGroup) findViewById(R.id.radioGroupForMusic);
turnOn = (RadioButton) findViewById(R.id.radioButtonMusicOn);
turnOff = (RadioButton) findViewById(R.id.radioButtonMusicOff);
musicGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
   @Override
   public void onCheckedChanged(RadioGroup group, int checkedId) {
     if(turnOff.isChecked()) {
       int musicOff = 0;
       mediaPlayer.pause();
       Intent intent = new Intent(MainMenuActivity.this, HighScoreActivity.class);
       intent.putExtra("music off",musicOff);
       startActivity(intent);
     }
     else if(turnOn.isChecked()) {
       int musicOn = 1;
       mediaPlayer.start();
       Intent intent = new Intent(MainMenuActivity.this, HighScoreActivity.class);
       intent.putExtra("music on",musicOn);
       startActivity(intent);
     }
   }
});

这是我的第二项活动

Intent intent = getIntent();
int musicOn = intent.getIntExtra("music on",0);
if(musicOn==1) {
   mediaPlayer = MediaPlayer.create(HighScoreActivity.this,R.raw.song);
   mediaPlayer.setLooping(true);
   mediaPlayer.start();
}

目前,当我选择radio button时,它会导航到我的第二个活动,这不是我想要的,我只是想控制来自<的背景音乐strong>第一个活动并使其对其他活动产生影响。 我认为我不应该使用Intent,因为它始终会导航到第二个活动

感谢任何建议。

7 个答案:

答案 0 :(得分:1)

Intent intent = new Intent(getBaseContext(), SignoutActivity.class);
intent.putExtra("EXTRA_SESSION_ID", value);
startActivityForREsult(intent)

答案 1 :(得分:0)

将值传递给另一个活动的最佳方法是使用Bundle。

只需创建一个Bundle对象并将传递的参数添加到它。

Bundle bundle = new Bundle();

add value to that bundle like
bundle.putString("key","value");
bundle.putInt("keyInt",value);

现在创建一个Intent对象并将bundle对象传递给putExtra intent对象方法。

Intent intent = new Intent(MainMenuActivity.this, HighScoreActivity.class);
intent.putExtras(bundle);

startActivity(intent);

这样您就可以将值发送到其他活动。

现在将值传递给另一个活动。

    Intent intent = getIntent();
    Bundle bundle =  intent.getExtras();
    String strVal = bundle.getString("key");
    int bytes = bundle.getInt("keyInt");

答案 2 :(得分:0)

请尝试这种方式。 第一次激活的变化。

musicGroup=(RadioGroup)findViewById(R.id.radioGroupForMusic);
musicGroup.setOnCheckedChangeListener(new  RadioGroup.OnCheckedChangeListener(){
    @Override
    public void onCheckedChanged(RadioGroup group,int checkedId){
        boolean  isMediaPlayerON=false;
        switch(checkedId){
            case R.id.radioButtonMusicOn:
                mediaPlayer.start();
                isMediaPlayerON=true;
            break;
            case R.id.radioButtonMusicOff:
                mediaPlayer.pause();
                isMediaPlayerON=false;
            break;
        }
        Intent intent=new Intent(MainMenuActivity.this,HighScoreActivity.class);
        intent.putExtra("music",isMediaPlayerON);
        startActivity(intent);
    }
});

和第二项活动

Intent intent = getIntent();
int isMediaPlayerON = intent.getBooleanExtra("music",false);
if(isMediaPlayerON){
   mediaPlayer = MediaPlayer.create(HighScoreActivity.this,R.raw.song);
   mediaPlayer.setLooping(true);
   mediaPlayer.start();
}

答案 3 :(得分:0)

这样做。

int musicOnOff = 1;

musicGroup = (RadioGroup) findViewById(R.id.radioGroupForMusic);
turnOn = (RadioButton) findViewById(R.id.radioButtonMusicOn);
turnOff = (RadioButton) findViewById(R.id.radioButtonMusicOff);
musicGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        if(turnOff.isChecked()){
            musicOnOff = 1;
            mediaPlayer.pause();
            Intent intent = new Intent(MainMenuActivity.this, HighScoreActivity.class);
            intent.putExtra("musiconoff", musicOnOff);
            startActivity(intent);
        }
        else if(turnOn.isChecked()){
            musicOnOff = 2;
            mediaPlayer.start();
            Intent intent = new Intent(MainMenuActivity.this, HighScoreActivity.class);
            intent.putExtra("musiconoff",musicOnOff);
            startActivity(intent);
        }
    }
});

在第二个Activity中抓住值

int musicOn = getIntent().getExtras().getInt("musiconoff");
if(musicOn == 1){
    mediaPlayer = MediaPlayer.create(HighScoreActivity.this,R.raw.song);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();
}

只需使用一个键,即&#34; musiconoff &#34; p>

请记住使用一个变量,即&#34; musicOnOff &#34;,以便在选中String时切换值。因此,即使您没有检查Intent,该变量的默认值应该是根据选中Radio Buttons的值。

修改 您可以通过这种方式在Radio Button之间切换,以防止导航到第二个Radio Button,这只会在检查时导航到第二个。

**Radio Buttons**

答案 4 :(得分:0)

  

第一种方法:SharedPreferences

您应该将SharedPreferences用于您的目的

 Boolean MusicIsOff = true; // whatever you like
 SharedPreferences sf=getSharedPreferences("APP_NAME",0);
 sf.edit().putBoolean("music",MusicIsOff).commit();

稍后在您的活动中,您可以通过以下方式进行检查:

SharedPreferences sf=getSharedPreferences("APP_NAME",0);
Boolean musicIndicatior=sf.getBoolean("music",false); // false means if i never set this parameter, what is the default value

您可以随意访问它。

  

第二种方法:广播接收器

还有另一种方法可以解决您的问题。 使用广播接收器。我建议你使用EventBus库这么容易使用,并会为你处理一切。只需在项目中添加几行即可使用它。

首先将其添加到您的gradle文件中:

compile 'org.greenrobot:eventbus:3.0.0'

然后在用户更改单选按钮时要接收广播的所有活动中,添加这些行。

@Override
public void onStart() {
   super.onStart();
   EventBus.getDefault().register(this);
}

@Override
public void onStop() {
  super.onStop();
  EventBus.getDefault().unregister(this);
}

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(Boolean event) {
   /* Do something */
};

最后,当用户更改单选按钮时,请执行以下操作:

Boolean music=true;
EventBus.getDefault().post(music);

答案 5 :(得分:0)

虽然其他评论说使用广播接收器(我认为它们意味着本地广播)更好,但我建议您使用EventBus因为unlike Android’s BroadcastReceiver/Intent system, EventBus uses standard Java classes as events and offers a more convenient API.

您只需将消息发送到接收活动,例如:

EventBus.getDefault().post(new MusicStatusEvent(status));

在您的onCheckedChanged(RadioGroup group, int checkedId)中,它将成为:

public void onCheckedChanged(RadioGroup group, int checkedId) {
  // Here you send the message if music is on or off.
  EventBus.getDefault().post(new MusicStatusEvent(turnOff.isChecked());
}

并且接收活动必须实施:

@Subscribe(threadMode = ThreadMode.MAIN)  
public void onMessageEvent(MusicStatusEvent event) {
  /* Do something after you receive the message */
  Log.d("status", "music is" + event.getStatus()? "on" : "off");
};

MusicStatusEvent 只是一个简单的pojo类:

public static class MusicStatusEvent {
   private boolean status;

   public MusicStatusEvent(boolean status) {
     this.status = status;
   }
   public void getStatus() {
     return status;
   }
}

有关EventBus的说明,您可以阅读https://stackoverflow.com/a/38122248/4758255

如果您真的想使用广播(虽然我不推荐),您可以查看https://stackoverflow.com/a/25246377/4758255

答案 6 :(得分:0)

试试这个

在你的第一个活动中: -

musicGroup = (RadioGroup) findViewById(R.id.radioGroupForMusic);
turnOn = (RadioButton) findViewById(R.id.radioButtonMusicOn);
turnOff = (RadioButton) findViewById(R.id.radioButtonMusicOff);
musicGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        if(turnOff.isChecked()){
            mediaPlayer.pause();
            Intent intent = new Intent(MainMenuActivity.this, HighScoreActivity.class);
            intent.putExtra("musicOff",true);
            startActivity(intent);
        }
        else if(turnOn.isChecked()){
            mediaPlayer.start();
            Intent intent = new Intent(MainMenuActivity.this, HighScoreActivity.class);
            intent.putExtra("musicOff",false);
            startActivity(intent);
        }
    }
});

在第二项活动中: -

Boolean musicOff = getIntent().getBooleanExtra("musicOff", true);
if(musicOff){
mediaPlayer = MediaPlayer.create(HighScoreActivity.this,R.raw.song);
mediaPlayer.setLooping(true);
mediaPlayer.start();
}