2014-02-19 69 views
0

我想從活動主設置不同的活動的背景顏色,但我得到一個空指針。按鈕來設置不同的活動顏色

這是主要的:

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

你想根據點擊按鈕來改變你的活動背景是什麼? – OWZY

+0

是的,我只是想測試它。所以我希望activity'activity_connect_four'在用戶點擊按鈕後有黑色背景。我的目標是允許用戶從選項菜單中設置所有活動的背景顏色。 – dhali

+1

佈局不是視圖,所以findViewById不起作用。您需要使用SharedPreferrences或帶有onActivityResult的startActivityForResult。然後美國getContentView –

回答

2

你正在收到一個NPE,因爲該活動和觀點沒有膨脹,因此它返回爲空。你設置背景顏色的方式本質上是有缺陷的。通過設置它,即使沒有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

+0

只是改變編輯編輯() – dhali