从Android中的其他活动更改ImageResource

时间:2013-09-24 17:23:08

标签: java android

单击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中写一些其他内容吗? 感谢您提供所有可能的解决方案 抱歉我的英语不好。

5 个答案:

答案 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) {...}
相关问题