2013-08-24 3 views
0

Мне нужен экран предпочтений с несколькими контактными данными. Итак, у меня есть 1 по умолчанию и кнопка «Добавить контакт», чтобы добавить дополнительные контакты. По какой-то причине все работает хорошо, но новое предпочтение не появляется, когда я снова посещаю настройки.Добавить параметры при нажатии кнопки - Android

Когда я добавляю контакт, отображаются все настройки - и данные могут быть введены. Но когда я выхожу и вступаю в привилегию, все уходит. Отображается только контакт 1.

public class SettingsActivity extends PreferenceActivity implements 
     OnSharedPreferenceChangeListener { 

public PreferenceScreen root; 

@SuppressWarnings("deprecation") 
public PreferenceScreen createPreferenceHierarchy() { 

    PreferenceCategory userDetails = new PreferenceCategory(this); 
    userDetails.setTitle("User Details"); 
    userDetails.setKey("userdetails"); 
    root.addPreference(userDetails); 

    EditTextPreference userName = new EditTextPreference(this); 
    userName.setTitle("User Name"); 
    userName.setSummary("Please enter your full name"); 
    userName.setDialogTitle("Please enter your name"); 
    userName.setKey("userName"); 
    userDetails.addPreference(userName); 

    EditTextPreference contactCount = new EditTextPreference(this); 
    contactCount.setTitle("Count"); 
    contactCount.setEnabled(false); 
    contactCount.setKey("contactcount"); 
    userDetails.addPreference(contactCount); 

    PreferenceCategory contact1 = new PreferenceCategory(this); 
    contact1.setTitle("Emergency Contact 1"); 
    contact1.setKey("contact1"); 
    contact1.setSummary("Add emergency contact details"); 
    root.addPreference(contact1); 

    EditTextPreference contactName1 = new EditTextPreference(this); 
    contactName1.setTitle("Name"); 
    contactName1.setSummary("Emergency Contact Name"); 
    contactName1.setDialogTitle("Please enter the name"); 
    contactName1.setKey("contactname1"); 

    contact1.addPreference(contactName1); 

    ListView v = getListView(); 
    Button button = new Button(this); 
    button.setText("Add Contact"); 
    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      int count = Integer.parseInt(root.getPreferenceManager() 
        .getSharedPreferences().getString("count", "1")); 
      int nextCount = count + 1; 

      EditTextPreference contactName = new EditTextPreference(
        SettingsActivity.this); 
      contactName.setKey("contactname" + nextCount); 
      contactName.setTitle("Email ID"); 
      contactName.setSummary("Emergency Contact's Name"); 

      PreferenceCategory preferenceCategory = new PreferenceCategory(
        SettingsActivity.this); 
      preferenceCategory.setKey("contact" + nextCount); 
      preferenceCategory.setTitle("Emergency Contact" + nextCount); 
      preferenceCategory.setSummary("Add emergency contact details"); 

      root.addPreference(preferenceCategory); 
      root.addPreference(contactName); 


      Editor editor = root.getPreferenceManager() 
        .getSharedPreferences().edit(); 
      editor.putString("count", Integer.toString(++count)); 
      editor.commit(); 
     } 
    }); 
    v.addFooterView(button); 
    return root; 
} 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     this.root = getPreferenceManager().createPreferenceScreen(
        SettingsActivity.this); 
     this.setPreferenceScreen(createPreferenceHierarchy()); 
    } 
} 

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

+0

Кто-нибудь, пожалуйста, скажите мне, есть ли у меня концептуальная ошибка или что не так с моей реализацией? – rtindru

ответ

0

Да, это точно отражает то, что вы делаете. Это предпочтительная деятельность, которая означает, что она сохраняет ценности для всех предпочтений. Это не означает сохранение всех (числа) предпочтений.

Каждый раз, когда вы пересматриваете это действие, он будет вызывать метод только CreateCreate. From onCreate ur control перейдет в createPreferenceHierarchy(). В этом методе вы настраиваете только одну настройку EditText. Значит только один вариант Edittext. Когда вы нажимаете кнопку «Добавить контакт», в настройках предпочтений добавляется только новая опция edittext. Таким образом, вы активируете активность, и в соответствии с детерминированием метода ur createPreferenceHierarchy() на ваш экран предпочтений следует добавить только один параметр EditText.

Если вы хотите, чтобы все Предпочтения назад, чем onCreate, получили граф из sharedPreference. и что многократно добавляет предпочтение EditText с предпочтением Catagory.

Измените метод ур. Соответственно, для демонстрации см. Это.

public class SettingsActivity extends PreferenceActivity implements 
     OnSharedPreferenceChangeListener { 

public PreferenceScreen root; 

@SuppressWarnings("deprecation") 
public PreferenceScreen createPreferenceHierarchy() { 

    PreferenceCategory userDetails = new PreferenceCategory(this); 
    userDetails.setTitle("User Details"); 
    userDetails.setKey("userdetails"); 
    root.addPreference(userDetails); 

    EditTextPreference userName = new EditTextPreference(this); 
    userName.setTitle("User Name"); 
    userName.setSummary("Please enter your full name"); 
    userName.setDialogTitle("Please enter your name"); 
    userName.setKey("userName"); 
    userDetails.addPreference(userName); 

    EditTextPreference contactCount = new EditTextPreference(this); 
    contactCount.setTitle("Count"); 
    contactCount.setEnabled(false); 
    contactCount.setKey("contactcount"); 
    userDetails.addPreference(contactCount); 

    PreferenceCategory contact1 = new PreferenceCategory(this); 
    contact1.setTitle("Emergency Contact 1"); 
    contact1.setKey("contact1"); 
    contact1.setSummary("Add emergency contact details"); 
    root.addPreference(contact1); 

    EditTextPreference contactName1 = new EditTextPreference(this); 
    contactName1.setTitle("Name"); 
    contactName1.setSummary("Emergency Contact Name"); 
    contactName1.setDialogTitle("Please enter the name"); 
    contactName1.setKey("contactname1"); 

    contact1.addPreference(contactName1); 

    ListView v = getListView(); 
    Button button = new Button(this); 
    button.setText("Add Contact"); 
    button.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View arg0) { 
      // TODO Auto-generated method stub 
      int count = Integer.parseInt(root.getPreferenceManager() 
        .getSharedPreferences().getString("count", "1")); 
      int nextCount = count + 1; 

      EditTextPreference contactName = new EditTextPreference(
        SettingsActivity.this); 
      contactName.setKey("contactname" + nextCount); 
      contactName.setTitle("Email ID"); 
      contactName.setSummary("Emergency Contact's Name"); 

      PreferenceCategory preferenceCategory = new PreferenceCategory(
        SettingsActivity.this); 
      preferenceCategory.setKey("contact" + nextCount); 
      preferenceCategory.setTitle("Emergency Contact" + nextCount); 
      preferenceCategory.setSummary("Add emergency contact details"); 

      root.addPreference(preferenceCategory); 
      root.addPreference(contactName); 


      Editor editor = root.getPreferenceManager() 
        .getSharedPreferences().edit(); 
      editor.putString("count", Integer.toString(++count)); 
      editor.commit(); 
     } 
    }); 
    v.addFooterView(button); 
    return root; 
} 

    @SuppressWarnings("deprecation") 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // TODO Auto-generated method stub 
     super.onCreate(savedInstanceState); 
     this.root = getPreferenceManager().createPreferenceScreen(
        SettingsActivity.this); 
     SharedPreferences preferences=PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
     int Count = Integer.parseInt(preferences.getString("count", "1")); 
     for (int i =0;i< Count ;i++){ 
     this.setPreferenceScreen(createPreferenceHierarchy()); 
     } 
    } 

    @Override 
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, 
      String key) { 
     // TODO Auto-generated method stub 

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