2014-01-27 4 views
1

Я делаю экран предпочтений для своего приложения. Внутри экрана предпочтений у меня есть ListPreference, чтобы «Распространять слово» о приложении. Однако я не хочу, чтобы переключатели были там. Я хочу, чтобы весь диалог выглядел так, как будто это список вещей, которые пользователь может сделать, и пользователь выберет одну опцию из меню, которое будет выполнено. Как мне это сделать? Я новичок в Android, исходя из фона iOS.ListPreference без радио

Заранее благодарен!

enter image description here

У меня есть это в моей pref_settings.xml.

<PreferenceCategory 
    android:key="pref_key_tell_friends" 
    android:title="@string/pref_header_tell_friends" > 
    <ListPreference 
     android:entries="@array/spread_the_word" 
     android:entryValues="@array/spread_the_word" 
     android:key="pref_key_spread" 
     android:title="@string/pref_title_spread" /> 
</PreferenceCategory> 

и этот фрагмент я загружаю в моей деятельности -

public static class SettingsFragment extends PreferenceFragment { 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      // Load the preferences from an XML resource 
      addPreferencesFromResource(R.xml.pref_settings); 
     } 
    } 
+0

отправьте свой код. – njzk2

+0

только что обновил вопрос с кодом –

+1

см. Http://stackoverflow.com/questions/8382097/listpreferences-without-any-radio-buttons – njzk2

ответ

1

Предпочтение работает так же, как любая кнопка, когда он задан как Preference в XML, вместо ListPreference, или любой другой тип. Итак, я просто добавил слушателя к предпочтению и открыл AlertDialog в прослушивателе. Вот код -

public static class SettingsFragment extends PreferenceFragment { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Load the preferences from an XML resource 
     addPreferencesFromResource(R.xml.pref_settings); 

     Preference myPref = (Preference) findPreference("pref_key_spread"); 
     myPref.setOnPreferenceClickListener(new OnPreferenceClickListener() { 
        public boolean onPreferenceClick(Preference preference) { 
         createListPreferenceDialog(); 
         return false; 

        } 
       }); 
    } 

    private void createListPreferenceDialog() { 

     Dialog dialog; 
     final String[] str = getResources().getStringArray(R.array.spread_the_word); 
     AlertDialog.Builder b = new AlertDialog.Builder(getActivity()); 
     b.setTitle("Spread the Word"); 

     b.setItems(str, new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, int position){ 

       Log.I(“Clicked the AlertDialog", + str[position]); 
      } 
     }); 

     dialog = b.create(); 
     dialog.show(); 

    } 
} 

И вот измененный XML -

<PreferenceCategory 
     android:key="pref_key_tell_friends" 
     android:title="@string/pref_header_tell_friends" > 
     <Preference 
      android:key="pref_key_spread" 
      android:title="@string/pref_title_spread" /> 
    </PreferenceCategory> 

Спасибо @ njzk2 для указателя.

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