繁体   English   中英

将结果传递给另一个活动

[英]Passing result to another Activity

我正在为Android编写应用程序,但在更改Buttons背景方面遇到困难。 我有四个Activity,Activity1是一个TableLayout,其中有三个Button。 每个按钮都会打开另一个活动。 我想从Activity2更改Activity1中的按钮。 所以我尝试通过传递结果来实现。 在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中,Button会更改背景。 我的问题是,我只能做一次,而在其他活动中我必须再做两次。 我尝试做RESULT_OK2,但显示错误。 那我怎么能再做几次呢? 我试图用另一种方式改变背景。 在Activity2中,我使用了Activity1中的button1,但是随后我得到了NullPointerExeption。 如果有人对此有任何想法,请回复!

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

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

我试图做RESULT_OK2

没有RESULT_OK2 Activity常量,所以这就是为什么会出现错误

您可以传回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();
}
}

然后在data参数的onActivityResult()中检查该onActivityResult() ,并适当设置图像。

返回上一个活动

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

您可以将值存储在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
    }

您需要使用不同的请求代码启动所有三个活动。 还是得到意图数据来区分。 您可以执行以下操作:从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);  
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM