0

伙计们,我希望用户在用户选择时更改我的应用程序中所有活动的背景图像。我可以从更改图像的位置更改背景图像,Activity但如果我尝试更改其他图像Activity,我会得到一个NullPointerException!是的,我已经检查了其他活动的 id Layout!这是代码。

public class setting extends Activity {
    TextView tv;
    CheckBox cbS, theme1, theme2;
    RelativeLayout rel;
    OnClickListener checkBoxListener;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.setting);

        cbS = (CheckBox) findViewById(R.id.cb);
        theme1 = (CheckBox) findViewById(R.id.theme1);
        theme2 = (CheckBox) findViewById(R.id.theme2);
        // cbW=(CheckBox)findViewById(R.id.cbWordPress);
        checkBoxListener = new OnClickListener() {

            public void onClick(View v) {
                if (cbS.isChecked()) {
                    // anything
                }

                if (theme2.isChecked()) {
                    RelativeLayout rel = (RelativeLayout) findViewById(R.id.rel);
                    Resources res = getResources();
                    Drawable drawable = res.getDrawable(R.drawable.back_image1);
                    rel.setBackgroundDrawable(drawable);
                    // findViewById(R.id.rel).setBackgroundResource(R.drawable.back_image1);
                }

            }
        };

        cbS.setOnClickListener(checkBoxListener);
        theme2.setOnClickListener(checkBoxListener);
        // cbW.setOnClickListener(checkBoxListener);

    }
}
4

2 回答 2

1

您无法访问尚未实例化的 UI 组件。使用 Intent 跨活动传递信息(用户的选择,或一些自定义标志或字符串),并在启动的活动中使用此“额外”信息来相应地更改背景。

阅读文档中有关意图的更多信息,以更好地理解和示例。

于 2012-07-20T09:42:02.583 回答
0

您不能这样做.. 当您使用 引用布局文件findViewById()时,android 系统仅在您当前的文件中查找此文件ContentView。(即您setContentView()为当前活动设置的视图)。所以很明显,系统将无法找到您指定的资源,因此您只会获得 NullPointerExeption。

您必须单独维护对背景的引用,并在您实际传递到那里时在其他 Activity 中使用它。

于 2012-07-20T09:37:07.890 回答