2014-11-18 2 views
0

У меня возникли некоторые проблемы с моим файлом pref_general.xml как я получаю следующее сообщение об ошибке:Ошибка при наполнении XML-файл с PreferenceActivity

android.view.InflateException: Binary XML файл строку # 14

Затем logcat указывает строку в моей PreferenceActivity, где я называю addPreferencesFromResource (R.xml.pref_general); "

После нескольких часов попыток разобраться в этом я до сих пор не знаю, в чем проблема, может быть, кто-то знаком с этим, или просто другой набор глаз может найти проблему.

Кроме того, я использую его в приложении, которое имеет ViewPager, и SettingsActivity запускается явно из метода onOptionsItemSelected() MainActivity. Я не думаю, что это важно (поскольку другие действия запускаются должным образом), но никогда не знаю ...

Thx !!

Строка 14 находится в моем компоненте ListPreference.

pref_general.xml:

?xml version="1.0" encoding="utf-8"?> 

<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<EditTextPreference 
    android:title="@string/pref_location_label" 
    android:key="@string/pref_location_key" 
    android:defaultValue="@string/pref_location_default" 
    android:inputType="text" 
    android:singleLine="true"/> 

<ListPreference 
    android:title="@string/pref_units_label" 
    android:key="@string/pref_units_key" 
    android:defaultValue="@string/pref_units_metric" 
    android:entryValues="@array/pref_units_values" 
    android:entries="@array/pref_units_options"/> 

</PreferenceScreen> 

strings.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string name="title_activity_settings">Settings</string> 

    <!-- Strings related to Settings --> 

    <!-- Label for the location preference [CHAR LIMIT=30] --> 
    <string name="pref_location_label">Location</string> 

    <!-- Key name for storing location in SharedPreferences [CHAR LIMIT=NONE] --> 
    <string name="pref_location_key" translatable="false">location</string> 

    <!-- Default postal code for location preference [CHAR LIMIT=NONE] --> 
    <string name="pref_location_default" translatable="false">-36.8799074,174.7565664</string> 

    <!-- Label for the temperature units preference [CHAR LIMIT=30] --> 
    <string name="pref_units_label">Temperature Units</string> 

    <!-- Label for metric option in temperature unit preference [CHAR LIMIT=25] --> 
    <string name="pref_units_label_metric">Metric</string> 

    <!-- Label for imperial option in temperature unit preference [CHAR LIMIT=25] --> 
    <string name="pref_units_label_imperial">Imperial</string> 

    <!-- Key name for temperature unit preference in SharedPreferences [CHAR LIMIT=NONE] --> 
    <string name="pref_units_key" translatable="false">units</string> 

    <!-- Value in SharedPreferences for metric temperature unit option [CHAR LIMIT=NONE] --> 
    <string name="pref_units_metric" translatable="false">metric</string> 

    <!-- Value in SharedPreferences for imperial temperature unit option [CHAR LIMIT=NONE] --> 
    <string name="pref_units_imperial" translatable="false">imperial</string> 

</resources> 

arrays.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string-array name="pref_units_options"> 
    <item>@string/pref_units_label_metric</item> 
    <item>@string/pref_units_label_imperial</item> 
    </string-array> 

    <string-array name="pref_units_values"> 
    <item>@string/pref_units_metric</item> 
    <item>@string/pref_units_imperial</item> 
    </string-array> 


</resources> 

И PreferenceActivity:

public class SettingsActivity extends PreferenceActivity implements Preference.OnPreferenceChangeListener{ 

private static final boolean ALWAYS_SIMPLE_PREFS = false; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Add 'general' preferences, defined in the XML file 
    addPreferencesFromResource(R.xml.pref_general); 

    // For all preferences, attach an OnPreferenceChangeListener so the UI summary can be 
    // updated when the preference changes. 
    bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_location_key))); 
    bindPreferenceSummaryToValue(findPreference(getString(R.string.pref_units_key))); 

} 


private void bindPreferenceSummaryToValue(Preference preference) { 
    // Set the listener to watch for value changes 
    preference.setOnPreferenceChangeListener(this); 

    // Trigger the listener immediately with the preference's current value 
    onPreferenceChange(preference, PreferenceManager 
      .getDefaultSharedPreferences(preference.getContext()) 
      .getString(preference.getKey(), "")); 
} 

@Override 
public boolean onPreferenceChange(Preference preference, Object newValue) { 
    String stringValue = newValue.toString(); 

    if (preference instanceof ListPreference) { 
     // For list preferences, look up the correct display value in 
     // the preference's entries list (since they have a separate labels/values) 
     ListPreference listPreference = (ListPreference) preference; 
     int prefIndex = listPreference.findIndexOfValue(stringValue); 
     if (prefIndex >= 0) { 
      preference.setSummary(listPreference.getEntries()[prefIndex]); 
     } 
    } else { 
     // For other preferences, set the summary to the value's simple string representation 
     preference.setSummary(stringValue); 
    } 
    return true; 
    } 
} 
+0

Как выглядят ресурсы массива? –

ответ

0

Хорошо, я нашел это:

На самом деле, последняя версия Android Studio теперь создает два файла значения для каждого типа. Итак, мои strings.xml были для w820dp ... поэтому исключая телефон, на который я тестирую.

Глупые вещи, но это, как мы узнаем ...

Надеюсь, этот пост будет полезен кому-то !!!

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

  • Нет связанных вопросов^_^