[英]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.