单击Activity B中的按钮后,我需要在Activity A的ImageView中设置setImageResource。 我正在尝试创建一个公共静态ImageView。
以下是活动A的代码:
public class ActivityA extends Activity {
public static ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activityA);
image = (ImageView) findViewById(R.id.image);
}
以下是活动B的代码:
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View button) {
if(editText.getText().toString().equalsIgnoreCase("myText")) {
ActivityA.image.setImageResource(R.drawable.other_image);
Intent act2= new Intent(ActivityB.this,ActivityA.class);
startActivity(act2);
}
});
}
我无法理解为什么我的应用程序在单击按钮后崩溃(如果我删除“activityA.image.setImageResource(R.id.other_image)
”它会起作用)所以问题必须在这里。我应该在ActivityA.class中写一些其他内容吗?
感谢您提供所有可能的解决方案
抱歉我的英语不好。
答案 0 :(得分:1)
public class ActivityA extends Activity {
public static ImageView image;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_activityA);
image = (ImageView) findViewById(R.id.image);
image.setImageResource(getIntent().getIntExtra("myImageResource",R.drawable.default_image);
}
*注意:在未找到“myImageResource”的情况下,我使用了R.drawable.default_image
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View button) {
Intent act2= new Intent(ActivityB.this,ActivityA.class);
act2.putExtra("myImageResource", R.drawable.other_image);
startActivity(act2);
}
});
}
答案 1 :(得分:0)
不要那样做。对视图的静态引用将使整个Activity保持活动状态。一旦活动停止,它就可以被系统杀死。
根据您正在尝试做什么,您可以将资源ID作为intent extra传递给ActivityA的新实例,或者在启动ActivityB时使用startActivityForResult,然后在ActivityA中实现onActivityResult。
答案 2 :(得分:0)
当您遇到应用程序崩溃时,您应该始终为其发布logCat。不过,我的猜测是你遇到空指针异常,因为ActivityA.image的某些部分是null。
无论如何,这不是从活动B更改活动A的最佳方法。请记住,当活动B位于前台时,活动A不可见。只有当活动A到达前台时,才会发生对活动A的UI的更改。因此,您真正在做的是更改活动A的状态,而不是其UI。要跟踪活动A的状态,请使用持久存储(SharedPreferences)或其他一些应用程序范围的存储。当活动A回到onResume()的前台时,如有必要,修改UI以反映当前状态。
显示应用程序的瞬时状态而不是其初始状态是大多数UI更新应该在onResume()而不是onCreate()的原因。同样,始终在onPause()中保存Activity的状态。
最后,在Android中,您应该避免使用公共全局变量来在组件(Activities,Services,ContentProviders和BroadcastReceivers)之间传递数据。相反,使用Intents或持久存储。
答案 3 :(得分:0)
您正在尝试更改活动B中活动A的图像。活动B不会夸大您的活动视图A.它不会在活动B中出现。但是肯定会抛出异常,因此应用程序崩溃.instead使用从活动B到A的额外值传递额外值。使用getIntent.getExtras()检入活动A.如果它有一些值,那么改变活动A的图像
答案 4 :(得分:0)
LogCat会帮助您理解您的问题,但我建议您删除静态值并尝试将PutExtra放在您的Intent上,因为据我所知,您无法直接在两个单独的活动之间发送或操作数据。 所以
private ImageView image;
关于活动A
和B
act2.putExtra("myImageResource", R.drawable.other_image);
如果捆绑存在,请不要忘记检查活动A
Intent intent = new Intent();
intent = getIntent();
Bundle bundle = intent.getExtras();
if (bundle != null) {...}