将结果传递给另一个活动

时间:2015-07-28 18:59:50

标签: android android-activity

我正在为Android编写应用程序,我在更改按钮背景方面遇到了困难。我有四个活动,Activity1是一个TableLayout,我有三个按钮。每个按钮打开另一个活动。我想从Activity2更改Activity1中的Button。所以我尝试通过传递结果。在Activity2中,我设置了如下结果:

@Override
public void onClick(View v) {
        setResult(Activity1.RESULT_OK);
        finish();
    }
}

在Activity1中我有这段代码:

          protected void onActivityResult(int requestCode, int resultCode, Intent data){
          if (resultCode == RESULT_OK)
          button1.setBackgroundResource(R.drawable.image);    
          }

因此,当用户单击Activity2中的Button,然后在Activity1中按钮更改背景。我的问题是我只能这样做一次,我必须在其他活动中再做两次。我试着做RESULT_OK2,但它显示我的错误。那我该怎么办呢?我试图以另一种方式改变背景。在Activity2中,我使用了Activity1中的button1但是我得到了NullPointerExeption。 如果有人知道如何,请回复!

5 个答案:

答案 0 :(得分:1)

您也可以比较requestCode(这是您在startActivityForResult上传递的请求代码)

这将避免将RESULT_OK解释为每个活动结果。

答案 1 :(得分:0)

  

我尝试做RESULT_OK2

Activity没有RESULT_OK2常量,这就是您收到错误的原因

您可以传回Intent Extras。像

这样的东西
@Override
public void onClick(View v) {
    // add the intent info
    Intent i = new Intent(); // make sure to use empty constructor
    i.putExtra("image", someVar); // might want activity const for key and someVar can be String, int, or whatever you want to use 
    setResult(Activity1.RESULT_OK, i);
    finish();
}
}

然后检查onActivityResult()参数中data中的变量并正确设置图像。

Going back to previous activity

答案 2 :(得分:0)

when you start the activity for result in android you have to pass request code and based on that request code you can make the conditions in the onActivityResultMethod.

**Button 1**
Intent i = new Intent(this, yourclass1);
startActivityForResult(i, 1);

**in yourclass1**
setResult(RESULT_OK);
finish();

**Button 2**
Intent i = new Intent(this, yourclass2);
startActivityForResult(i, 2);

**in yourclass2**
setResult(RESULT_OK);
finish();

**Button 3**
Intent i = new Intent(this, yourclass3);
startActivityForResult(i, 3);

**in yourclass3**
setResult(RESULT_OK);
finish();

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1 && resultCode == RESULT_OK) {
       // change background of button 1
    }else if (requestCode == 2 && resultCode == RESULT_OK) {
       // change background of button 2
    }else if (requestCode == 3 && resultCode == RESULT_OK) {
       // change background of button 3
    }
}

答案 3 :(得分:0)

您可以在SharedPreference中存储值,并根据SharedPreference中的值,更改button1的背景颜色。

在活动2中,

@Override
public void onClick(View v) {
    SharedPreferences.Editor editor = getSharedPreferences("RESULTS", MODE_PRIVATE).edit();
    editor.putInt("BUTTON1_bg", 1);
    editor.commit();
    finish();
}

在活动1中

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
      SharedPreferences prefs = getSharedPreferences("RESULTS", MODE_PRIVATE); 
      int bg = prefs.getInt("BUTTON1_bg");
      // based on value of  bg, you can decide what background to use for button1
    }

答案 4 :(得分:0)

您需要使用不同的请求代码启动所有三个活动。或者获取意图数据以区分。 你可以做点什么 从Activity1开始所有活动,requestCode

startActivityForResult( <intent>,<an requestCode>);

然后您可以在onActivityResult()中过滤相同的requestCode

if(requestCode==11){
   button1.setBackgroundResource(R.drawable.image);  
}else if(requestCode==22){
   button2.setBackgroundResource(R.drawable.image);  
}else if(requestCode==33){
   button3.setBackgroundResource(R.drawable.image);  
}