我正在为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。 如果有人知道如何,请回复!
答案 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
中的变量并正确设置图像。
答案 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);
}