用于设置不同活动颜色的按钮

时间:2014-02-19 00:32:01

标签: java android layout background nullpointerexception

我正在尝试从活动主要设置不同活动的背景颜色,但我得到一个空指针。

这是主要的:

View activity;
activity = findViewById(R.layout.activity_connect_four);

按钮:

Button highScoreButton1 = (Button) findViewById(R.id.bgc);
highScoreButton1.setOnClickListener(new OnClickListener() {
    public void onClick (View v) {
        // null pointer on below line
        activity.findViewById(android.R.id.content)
                .setBackgroundColor(Color.BLACK);                   
    }
});  

logcat:

FATAL EXCEPTION: main
java.lang.NullPointerException
    at com.example.con4.MainActivity$4.onClick(MainActivity.java:80)
    at android.view.View.performClick(View.java:4240)
    at android.view.View$PerformClick.run(View.java:17721)
    at android.os.Handler.handleCallback(Handler.java:730)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5103)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
    at dalvik.system.NativeStart.main(Native Method)

logCat指向的地方,我不知道要改变什么。任何帮助,我将不胜感激

1 个答案:

答案 0 :(得分:2)

您正在接收NPE,因为该活动和视图未被夸大,因此它返回null。你设置背景颜色的方式本质上是有缺陷的。通过设置它,即使没有NPE,您也可以将设置存储在设备的内存中。设备杀死您的活动的那一刻,您将丢失该信息。作为替代方案,您需要将此设置存储在设备上以便以后检索。对于您尝试执行的操作,我建议您使用SharedPreferences。

在您的设置中活动:

Button highScoreButton1 = (Button) findViewById(R.id.bgc);
SharedPreferences prefs = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
highScoreButton1.setOnClickListener(new OnClickListener() {
    public void onClick (View v) {
        prefs.edit().putInt(BACKGROUND_COLOR, Color.BLACK).commit();             
    }
});  

BACKGROUND_COLOR是一个可以设置为“background_color”的关键变量。然后当你开始其他活动时:

SharedPreferences prefs = getSharedPreferences(PREF_NAME, Context.MODE_PRIVATE);
int color = prefs.getInt(BACKGROUND_COLOR, Color.WHITE);

并使用该颜色设置背景。使用此方法,背景颜色将保存到设备,直到它被覆盖(设置更改)或应用程序被卸载。

如果您希望将此作为所有活动的背景,我建议让所有活动扩展基本活动并在那里实施该代码。

您可以在此处查看其他存储方法:http://developer.android.com/guide/topics/data/data-storage.html