2010-12-05 5 views
0

Preferenceクラスでは、インテントを設定し、クリックすると別のアクティビティをアクティブにすることができますが、このメソッドを使用してアクティビティから結果を処理する方法を見つけることができません。私はカスタムビューを提供することができるDialogPreferenceもありますが、使用したいビューに直接アクセスすることはできません。アクティビティのみです。結果を返す既存のアクティビティを使用するカスタム設定を作成するにはどうすればよいですか?

RingtonePreferenceは、PreferenceManagerのいくつかのパッケージ内部メソッドを使用して、開始されたサブアクティビティから結果を受け取るように見えますが、これらは内部でパッケージされているため、同じことができません。

結果を返すアクティビティ(カスタム設定の値として結果を保存する)でカスタムプリファレンスを処理する他の方法はありますか?

答えて

2

私はまた、PreferenceActivityがonActivityResultを返さないことに気付きました。つまり、あなたのSubActivityが嗜好を直接保存できなかった理由はありますか?あなたはそれの値をチェックする必要がある場合は、回避策として、あなたのPreferenceActivityのonResumeでそれをチェックすることができます。..

//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(); 
} 
+0

理想的には、私は、Bluetoothデバイスを選択するための活動を再利用し、そのを使用できるようにしたいと思います結果を嗜好値として返す。また、PreferenceActivityのホスティングを変更することなく、XMLから1つ以上の設定済みのBluetoothデバイスに使用できる再利用可能なPreferenceを持っていたいと思います。私がこれに近づけることができるのは、他のアクティビティを開始するアクティビティを開始するプリファレンスを持つことです。完了したらそのプリファレンスをプリファレンスに保存しますが、この余分なアクティビティをすべて避けるのがよいでしょう。 – SoftMemes

+0

これは少なくとも私にとっては良い考えです。 –

関連する問題