2016-05-27 6 views
0

Я использую общие настройки в своем приложении, чтобы установить разные цвета фона.Настройка программно цвет фона макета = nullpointerexc

private void loadPreferences(){ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    boolean isBackgroundDark = sharedPreferences.getBoolean("background_color",false); 
    if(isBackgroundDark){ 
     LinearLayout mainLayout = (LinearLayout) findViewById(R.id.mainActivityLayout); 
     mainLayout.setBackgroundColor(Color.parseColor("#3c3f41")); 

    } 
    String notebookTitle = sharedPreferences.getString("title","Notebook"); 
    setTitle(notebookTitle); 
} 

Этот код отлично работает, цвет изменений в главном исполнении. Но когда я хочу изменить цвет просто строку элемента

частных недействительных loadPreferences() { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences (это);

boolean isBackgroundDark = sharedPreferences.getBoolean("background_color",false); 
    if(isBackgroundDark){ 
     LinearLayout mainLayout = (LinearLayout) findViewById(R.id.mainActivityLayout); 
     mainLayout.setBackgroundColor(Color.parseColor("#3c3f41")); 
     RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.list_row_rel_layout); 
     relativeLayout.setBackgroundColor(Color.parseColor("#3c3f41")); 
    } 
    String notebookTitle = sharedPreferences.getString("title","Notebook"); 
    setTitle(notebookTitle); 
} 

В XML-файле этого относительного расположения идентификатор является определить

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="#FFF9F9F9" 
     android:id="@+id/list_row_rel_layout" 
     android:paddingRight="10dp" 
     android:paddingTop="10dp" 
     android:paddingBottom="10dp"... 
/> 

Logs ниже:

FATAL EXCEPTION: main 
                    Process: com.bczyzowski.notebook, PID: 20754 
                    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.bczyzowski.notebook/com.bczyzowski.notebook.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setBackgroundColor(int)' on a null object reference 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                     at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                     at android.os.Handler.dispatchMessage(Handler.java:102) 
                     at android.os.Looper.loop(Looper.java:148) 
                     at android.app.ActivityThread.main(ActivityThread.java:5417) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.RelativeLayout.setBackgroundColor(int)' on a null object reference 
                     at com.bczyzowski.notebook.MainActivity.loadPreferences(MainActivity.java:77) 
                     at com.bczyzowski.notebook.MainActivity.onCreate(MainActivity.java:34) 
                     at android.app.Activity.performCreate(Activity.java:6237) 
                     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                     at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                     at android.os.Handler.dispatchMessage(Handler.java:102)  
                     at android.os.Looper.loop(Looper.java:148)  
                     at android.app.ActivityThread.main(ActivityThread.java:5417)  
                     at java.lang.reflect.Method.invoke(Native Method)  
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  
+4

Можете ли вы показать свои журналы? –

+0

@AhmedHegazy журналы добавлены. –

ответ

0

Вашей проблема заключается в том, что вы пытаетесь найти вид, что не находится под вашей текущей структуры представления макета. Проблема RelativeLayout здесь не может быть найдена в представлении, которое вы установили в setContentView();.

+0

И как я могу получить доступ к этому относительному расположению другим способом? –

+0

Для чего вы его используете? –

+0

Является ли строка списка, используемая в классе, который расширяет адаптер массива. –

0

установить его в качестве глобальной переменной в вашей деятельности до onCreate

private LinearLayout mainLayout; 

, а затем в onCreate вашей деятельности

mainLayout = (LinearLayout) findViewById(R.id.mainActivityLayout); 

, а затем в методе

private void loadPreferences(){ 
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); 

    boolean isBackgroundDark = sharedPreferences.getBoolean("background_color",false); 
     if(isBackgroundDark){ 
        mainLayout.setBackgroundColor(Color.parseColor("#3c3f41")); 
      } 
      String notebookTitle = sharedPreferences.getString("title","Notebook"); 
      setTitle(notebookTitle); 
} 

Надеется, что это помогает

+0

Как я уже говорил, setBackgroundColor для линейного макета отлично работает, относительный макет вызывает проблему ... –

0

я понял из вашего вопроса, что вы используете этот RelativeLayout для элемента из пользовательских ListView. И Просмотр вашего MainActivity is mainActivityLayout.

Если мое предположение верно, то вы не можете получить доступ к этой RelativeLayout внутри MainActivity потому что RelativeLayout не часть mainActivityLayout,

, но вы можете получить к нему доступ из внутри getView() Функция Адаптер вашего пользовательского списка.

надеюсь, что это поможет

Смежные вопросы