2013-03-29 23 views
5

ho una schermata delle preferenze (responder_generic.xml) come segue:findViewById restituisce null per il layout preferenza

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" > 

    <Preference 
     android:defaultValue="false" 
     android:key="auto_responder_key" 
     android:layout="@layout/preference_header_switch_item_responder" 
     android:title="@string/auto_responder"> 
    </Preference> 

</PreferenceScreen> 

che sto istanziare come segue: (nella versione 2.3.3)

addPreferencesFromResource(R.xml.responder_generic); 

e il mio layout = preference_header_switch_item_responder appare come segue:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Layout of a header item in PreferenceActivity. --> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="33dp" 
    android:gravity="center_vertical" 
    android:minHeight="33dp" 
    android:id="@+id/preference_header_switch_item_responder" 
    style="?android:attr/listSeparatorTextViewStyle" > 

    <RelativeLayout 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="5dp" 
     android:layout_weight="1" > 

     <TextView 
      android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:ellipsize="marquee" 
      android:fadingEdge="horizontal" 
      android:singleLine="true" 
      android:text="@string/auto_responder" 
      android:textAppearance="?android:attr/textAppearanceSmall" 
      android:textStyle="bold" /> 

     <TextView 
      android:id="@+id/summary" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@android:id/title" 
      android:ellipsize="end" 
      android:textAppearance="?android:attr/textAppearanceSmall" /> 
    </RelativeLayout> 

    <include layout="@layout/compound_button" /> 

</LinearLayout> 

ora, ho il pulsante composto d efined rispettivamente layout cartella e layout/v-14 come segue:

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > 

<CheckBox 
    android:id="@+id/switchWidget" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:clickable="true" 
    android:focusable="false" 
    android:padding="8dip" 
    android:layout_marginRight="14dip" /> 

</merge> 

e

<?xml version="1.0" encoding="utf-8"?> 
<merge xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

    <Switch 
     android:id="@+id/switchWidget" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:clickable="true" 
     android:focusable="false" 
     android:padding="8dip" 
     android:layout_marginRight="14dip"/> 

</merge> 

Nel metodo onPostCreate, sto cercando di trovare la questa casella di controllo/interruttore in fase di esecuzione utilizzando findViewById(R.id.switchWidget) ma il suo nulla sempre ritornare .

Qualche idea su quale potrebbe essere la ragione?

risposta

6

La ragione era che aggiungevo più preferenze allo schermo, quindi, ho dovuto ricorrere all'aggiunta di una preferenza personalizzata. La soluzione dettagliata è stata fornita al seguente link:

La soluzione è stata fornita nel seguente link.

usage of findviewbyid in preferenceactivity

Problemi correlati