Come faccio a creare una preferenza personalizzata che utilizza un'attività esistente che restituisce un risultato?
-
08-10-2019 - |
Domanda
La classe Business permette l'intenzione di impostare, ad avere una preferenza attivare un'altra attività quando si fa clic, ma sono in grado di trovare un modo per gestire il risultato da un'attività utilizzando questo metodo. C'è anche il DialogPreference dove posso fornire una visualizzazione personalizzata, ma non hanno accesso diretto alla vista che voglio usare, soltanto un'attività.
Scavando ulteriormente un po ', sembra che il RingtonePreference utilizza alcuni metodi interni del pacchetto sul PreferenceManager di ricevere i risultati di un iniziato sotto-attività, ma in quanto questi sono pacchetto interno non sono in grado di fare lo stesso.
C'è un altro modo di gestire una preferenza personalizzato con un'attività che restituisce un risultato (in cui il risultato è quello di essere salvato come il valore della preferenza)?
Soluzione
Inoltre ho notato PreferenceActivity non restituisce onActivityResult. Detto questo, c'è un motivo per il vostro subattività non poteva salvare la preferenza diretta? Se è necessario controllare il valore di esso, si potrebbe verificare che al onResume della vostra PreferenceActivity come una soluzione ..
//SubActivity onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button btn = (Button) findViewById(R.id.Button01);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences prefs = getSharedPreferences(TestPreferenceActivity.PREFS_FILE, MODE_WORLD_READABLE);
prefs.edit().putString("mykey", "someValue").commit();
finish();
}});
}
//PreferenceActivity onResume
@Override
protected void onResume() {
Log.d(TAG, "Preferences Resumed");
//Check for new Preference Values
SharedPreferences prefs = getSharedPreferences(PREFS_FILE, MODE_WORLD_READABLE);
String value = prefs.getString("mykey", "defValue");
Log.d(TAG, "Current value is: " + value);
super.onResume();
}