2011-06-18 8 views
10

私はEditTextPreference 'textPasscode'をCheckBoxPreference 'checkBoxPasscode'に依存させました。ユーザーがチェックボックスをチェックするとすぐに「textPasscode」を開くようにします。それは可能ですか? そうであれば、onSharedPreferenceChanged()関数で何を使用できますか?EditTextPreferenceをコードで開きます(プログラムで)

public void onSharedPreferenceChanged(SharedPreferences prefs, String key) { 
     if(key.contentEquals("checkBoxPasscode")){ 
       // ----some method to open edit text "textPasscode" ?? 
      } 
} 

はありがとう

答えて

12

この問題は私には非常に迷惑だったので、Sandorの提案を実装した後、私はAndroidリファレンスでより良い解決策を探して、見つけたものを探しました。
EditTextPreferenceDialogPreferenceから継承しています。このクラスはshowDialogメソッドを持っていますので、showTextPreferenceから新しいクラスを作成しました。これはcharmeのように機能します。ここで

はいくつかのコードです:私のsettings.xml内

public class MyEditTextPref extends EditTextPreference { 
    //...constructor here.... 

    public void show() { 
     showDialog(null); 
    } 
} 

私はmyEditTextPref

<package.that.contains.MyEditTextPreferences 
    android:key="myPref" 
    android:title="@string/pref_title" 
    android:summary="@string/pref_summary" 
    android:dialogTitle="@string/dialog_title" 
    android:dialogMessage="@string/dialog_message" 
/> 

を追加しました(私はActivitySettingsレイアウトを生成するために使用するWICH)

最後に私がやったことは、PreferenceActのonSharedPreferenceChangedメソッドです実際に私はPreferenceFragmentを使用していないよ。:ivity

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
    if (key.equalsIgnoreCase(MY_CHECK_BOX)) { 
     MyEditTextPreferences myPref = (MyEditTextPreferences) findPreference("myPref"); 
     myPref.show(); 
    } 
} 

psの私は、事前ハニカム互換性をしたいが、私はずっとこのコードの変更を考えていませんので。

+1

ベストセラー:)ありがとうたくさん:) – cV2

+0

私は 'BadTokenException:ウィンドウを追加することができません' stacktrace時々。どんな考え? – theblang

+0

私は 'PreferenceActivity'を離れて戻ります。私は 'コンテキスト'おそらく何かと思いますか? – theblang

4

私は同じ問題に遭遇しました。 これは一般的な問題ではないと思うが、ネット上でこれに関する検索結果はほとんどない。

コードから手動でEditTextPreferenceを表示することはできませんが、明らかな回避策があります。

アラートダイアログを作成し、[OK]ボタンのワンクリックを処理することで、同じ外観と動作を実現できます。

これは、テキスト入力ダイアログのための簡単な一般的なコードです:

public static EditText showInputDialog(Context context, OnClickListener clickListener, String message) 
{ 
    LayoutInflater factory = LayoutInflater.from(context); 
    final View textEntryView = factory.inflate(R.layout.dialogedittext, null);    
    final EditText editText = (EditText)textEntryView.findViewById(id.dialogEditText); 
    final AlertDialog.Builder builder = new AlertDialog.Builder(context); 
    builder  
    .setTitle(message) 
    .setView(textEntryView) 
    .setPositiveButton("OK", clickListener) 
    .setNegativeButton("Cancel", null).show(); 
    return editText; 
} 

ただOnClickListenerに渡し、そこに環境設定を扱います。 ユーザーが入力した入力文字列を受け取るようにEditText変数を設定することを忘れないでください。

この問題を検索するユーザーには時間を節約することができたら助かります。

+0

ありがとうございました。それは間違いなく助けてくれる –

関連する問題