簡體   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