Добавлять динамические настройки флажков в Android и отображать их на экране настроек? - PullRequest
4 голосов
/ 27 ноября 2011

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

Вот мой класс настроек

 public class Preferences extends PreferenceActivity {

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

             //One way to add default preferences
    //addPreferencesFromResource(R.xml.prefs);

             //For now I prefer this
    setPreferenceScreen(defaultPref());

}

    // The first time application is launched this should be read
private PreferenceScreen defaultPref() {
    PreferenceScreen root = getPreferenceManager().createPreferenceScreen(this);

    CheckBoxPreference checkboxPref = new CheckBoxPreference(this);
    checkboxPref.setKey("1");
    checkboxPref.setTitle("SomeRandomStuff");
    root.addPreference(checkboxPref);

    return root;
 }
     public showAllPreferences () {
          // TO SHOW ALL THE PREFERENCES BUT NOT SURE HOW TO DISPLAY THEM
     }
}

Теперь я не могу понять, как мне динамически добавлять дополнительные настройки и отображать их в настройкахscreen.

Вот основной класс занятий

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    try {
        setContentView(R.layout.main);
    }catch (Exception e) {
        e.printStackTrace();
    }

    exView = (ExpandableListView) findViewById(R.id.expandableListView1);

    // STUFF TO ADD IN PREFERENCES 
    editText = (EditText) findViewById(R.id.editText1);
    //BUTTON TO ADD PREFERENCES.(SEARCH TERM IS IDENTIFIED AND ADDED TO PREF)
    addButton = (ImageButton) findViewById(R.id.imageButton1);
    // BUTTON TO DISPLAY PREFERENCES
    prefButton = (ImageButton) findViewById(R.id.imageButtonPref);

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);
    final SharedPreferences.Editor editor = settings.edit();

    addButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub

            PrefObject obj = new PrefObject();
            String key = Integer.toString(i);
            String title = editText.getText().toString();
            //prefArray.add(obj);
            editor.putString(key, title);
            editor.commit();
                            i++

        }
    });
    prefButton.setOnClickListener(new OnClickListener() {
        // This method should show the preferences activity with new data
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Intent intent = new Intent(Main.this, Preferences.class);
                    startActivity(intent);
                            // I know how to call the intent but I am not sure if
                            // how to read the saved contents and display it
                            Preferences pref = new Preferences();
                            pref.showAllPreferences();  





        }
    });

1 Ответ

3 голосов
/ 27 ноября 2011

AFAIK, для предпочтений нет опции «видимости», что имеет смысл, когда вы думаете, что это всего лишь ListView.

См. [ 1 ]. Для того, что я вижу, вы можете сделать что-то вроде этого:

PreferenceScreen screen = this.getPreferenceScreen();
// Use "1" since you're using "1" to create it.
CheckBoxPreference ckbox = (CheckBoxPreference) this.findPreference("1");
screen.removePreference(ckbox);

Чтобы воссоздать, вы можете сделать это [ 2 ]:

screen.addPreference(ckbox);

Кроме того, не забудьте создать свое предпочтение, используя setOrder(int order), чтобы при повторном создании оно было воссоздано в правильном положении.

Как видите, возможно, стоит сохранить глобальную ссылку на предпочтение, чтобы сделать его проще и быстрее.

Конечно, мне не нужно говорить, что вы должны интегрировать эту логику в ваш прослушиватель CheckboxPreference. Посмотрите этот ответ никем иным, как самим Рето Мейером, чтобы увидеть хороший способ сделать это (это тоже флажок). Там он регистрирует слушателя на весь экран и проверяет, какое предпочтение вызвало слушателя, но вы можете сделать это проще (но более подробным позже), просто установив его setOnPreferenceChangeListener.

* edit: я вижу, что вы также используете кнопку, чтобы добавить предпочтение. Вы также можете реализовать ту же логику выше в самой кнопке. Все зависит от того, хотите ли вы сделать это с помощью флажка или кнопки.

Наконец, возможно, стоит просто установить включенное состояние, если только вы не делаете что-то вроде «увидеть расширенные настройки» или что-то, что не позволяет начинающим пользователям избегать опасных действий с вашим приложением. Но в целом состояния включения работают лучше для взаимодействия с пользователем, ИМХО.

Надеюсь, это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...