我正在尝试从活动主要设置不同活动的背景颜色,但我得到一个空指针。
这是主要的:
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指向的地方,我不知道要改变什么。任何帮助,我将不胜感激
答案 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