2014-02-19 6 views
0

다른 활동의 배경색을 기본 활동에서 설정하려고하지만 null 포인터가 나타납니다. 다른 활동 색상을 설정하는 버튼

은 기본입니다 :

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);     
    } 
}); 

로그 캣 :

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) 

로그 캣이 가리키는, 내가 무엇을 모르는 변화. 도움이 될만한 도움이 무엇 이든요

+0

당신이 클릭 버튼에 따라 활동의 배경을 변경 하시겠습니까? – OWZY

+0

네, 그냥 테스트하고 싶었습니다. 따라서 사용자가 버튼을 클릭 한 후 'activity_connect_four'활동이 검은 색 배경이되도록하고 싶습니다. 내 목표는 사용자가 옵션 메뉴에서 모든 활동의 배경색을 설정할 수 있도록하는 것입니다. – dhali

+1

레이아웃이보기가 아니므로 findViewById가 작동하지 않습니다. onActivityResult와 함께 SharedPreferrences 또는 startActivityForResult를 사용해야합니다. 다음 usd getContentView –

답변

2

NPE는 활동 및보기가 부풀려지지 않아 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

+0

편집을 edit()로 변경했습니다. – dhali

관련 문제