2013-02-26 4 views
0

Можно ли сохранить пользовательские настройки в другом предпочтении (разделенные запятой) или есть более чистый и лучший способ?Как сохранить пользовательские настройки?

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

    <PreferenceCategory android:key="client" android:title="@string/client"> 

     <PreferenceScreen 
      android:key="manage_sources" 
      android:title="@string/manage_sources" 
      android:persistent="false"> 

      <com.example.preference.EditSourcePreference 
       android:key="add_source" 
       android:title="@string/add_source" 
       android:dialogTitle="@string/add_source" /> 

      <PreferenceCategory 
       android:key="sources" 
       android:title="@string/sources" /> 

     </PreferenceScreen> 

    </PreferenceCategory> 

</PreferenceScreen> 

Это вложенный экран предпочтений, обеспечивающий предпочтение добавления источников. Вот код Java:

public class EditSourcePreference extends EditTextPreference implements TextWatcher { 

    private EditText source; 
    private Button positiveButton; 

    private String originalSource; 

    public EditSourcePreference(Context context) { 
     super(context); 
    } 

    public EditSourcePreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void showDialog(Bundle state) { 
     super.showDialog(state); 

     source = getEditText(); 
     source.addTextChangedListener(this); 

     positiveButton = ((AlertDialog) getDialog()).getButton(AlertDialog.BUTTON_POSITIVE); 
     afterTextChanged(source.getText()); 

     originalSource = source.getText().toString(); 
    } 

    @Override 
    protected void onDialogClosed(boolean positiveResult) { 
     if (!positiveResult) { 
      return; 
     } 

     SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getContext()); 
     SharedPreferences.Editor editor = pref.edit(); 

     String sources = pref.getString("sources", ""), 
       newSource = source.getText().toString(); 

     boolean append = sources.indexOf(originalSource) != -1; // TODO: needs debugging!!! 

     if (append) { 
      if (!"".equals(sources)) { 
       sources += ";"; 
      } 

      sources += newSource; 
     } else { 
      sources = sources.replace(originalSource, newSource); 
     } 

     editor.putString("sources", sources); 
     editor.commit(); 

     super.onDialogClosed(positiveResult); 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     positiveButton.setEnabled(s.toString().matches("^[a-z0-9_:/]+[.]+[a-z0-9_.:/]+$")); 
    } 

} 

Это должно выглядеть, как это и будет расширен путем редактирования и удаления записей: How it looks like

ответ

0

См SharedPreferences.Editor. Если у вас есть вопросы, сообщите мне.

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

Здесь они, извините, если там есть некоторая ошибка, я набрал его в «Блокноте».

private final String PREFS_NAME = "prefs"; 

private final String KEY_AGE = "age"; 
private final String KEY_COUNTRY = "location"; 

    SharedPreferences sharedPreferences = ctx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 

    editor.putInt(KEY_AGE, "13"); 
    editor.putString(KEY_COUNTRY, "USA"); 

    editor.commit(); 

// To retrieve the values 

    SharedPreferences sharedPreferences = ctx.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE); 
    sharedPreferences.getInt(KEY_AGE, 0); 
    sharedPreferences.getString(KEY_COUNTRY, 0); 

Если это не удовлетворяет вашим потребностям, а затем использовать database.

+0

Это позволит сэкономить одну привилегированную и получить его значение по умолчанию 0 (это не индекс). Мне нужно сохранить несколько информации ... – dtrunk

0

Вы можете использовать SharedPreferences для хранения значений. Вы можете обратиться к этому: http://developer.android.com/reference/android/content/SharedPreferences.html

вы также можете обратиться к ним:

How to use SharedPreferences in Android to store, fetch and edit values

How to use SharedPreferences

Using shared preferences editor

http://developer.android.com/guide/topics/data/data-storage.html

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