2012-03-16 30 views
6

私はPreferenceActivityを、とりわけ、コール転送オプションを含むカテゴリとしています。EditTextPreferenceとCheckBoxPreferenceを組み合わせることは可能ですか?

  • ユーザーが右側のチェックボックスをオンにすると有効/無効になります。
  • ユーザーがテキスト(または好みで何かを)押した場合には、任意の使用が、おそらくではありませんが、ここで、この特定のpreferencecategoryの抜粋です

をEditTextPreferenceダイアログを開きます:

<PreferenceCategory 
     android:title="@string/category_callforward"> 

    <EditTextPreference 
      android:key="call_forward_always" 
      android:title="@string/call_forward_always" 
      android:summary="@string/call_forward_forwardto" /> 
    </PreferenceCategory> 
私は、可能な場合、この方法でそれを実装したいと思います

EDIT

// Locates the correct data from saved preferences and sets input type to numerics only 
private void setCallForwardType() 
{ 
    ep1 = (EditTextPreference) findPreference("call_forward_always"); 

    EditText et = (EditText) ep1.getEditText(); 
    et.setKeyListener(DigitsKeyListener.getInstance()); 

} 

EDIT2

誰もが、まだ迷っている場合は - これは私が好みのように何をしたいです:

http://i.imgur.com/GHOeK.png

EDIT3

私はしましたサーチここ数時間の間、「PreferenceGroupAdapter」という単一の単語が出てきました。しかし、私はそれを使用する方法を示す例やチュートリアルを見つけることができませんでした。提案?これは正しい道でもありますか?

EDIT4

これは本当に、私は非常に多く、私が代わりに組み合わせて編集 - とチェックボックス好みの実装することができ、代替(ユーザーフレンドリー)ソリューションへの提案たいおそらくされていない場合。

+0

あなたは今まで、この問題を解決するために管理していましたか?私はこのようなカスタム設定を作成しようとしていますが、設定行のチェックボックスを使うか、設定ダイアログに組み込んでいますが、これはどこでも見つけることができた唯一のリファレンスです。 –

+0

@ SeanO'Toole私の答えが役立つかどうかを見てください。 – theblang

答えて

2

これは可能です。最初に、PreferenceActivityから拡張する必要があるプリファレンスのクラスを作成します。このように使用:

// editbox ise your EditTextPreference, so set it. 
checkbox = (CheckBoxPreference) findPreference("checkbox_preference"); 

checkbox.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 
    public boolean onPreferenceChange(Preference preference, Object newValue) { 
     if(newValue.toString().equals("false")) { 
      PrefActivity.this.editbox.setEnabled(false); 
     } else if(newValue.toString().equals("true")) { 
      PrefActivity.this.editbox.setEnabled(true); 
     } 
     return true; 
    } 
}); 

私はそれが役に立ちます。

+0

私はすでに、自分のSettingsActivityを持っています。これは明らかに、PreferenceActivityを拡張しています。このクラス内であなたの提案に従うメソッドを作成することはできませんか? また、 findPreference()を使用しています。これらのchechboxpreferencesをonCreate()でプログラムで追加する必要がありますか? – CodePrimate

+0

はい、 'listeners'という名前のメソッドを作成し、' onCreate'メソッドを呼び出します。それが動作します。 –

+0

私のコメントを編集しました:) – CodePrimate

1

CheckBoxPreferenceのキーをres/values/strings.xmlに定義してください。

にXML属性android:key="@string/THE_KEY_YOU_DEFINED"を指定すると、自動的に状態がSharedPreferencesに保存されます。

EditTextPreferenceにXML属性android:dependency="@string/THE_KEY_YOU_DEFINEDを付けます。

EditTextPreferenceは、CheckBoxPreferenceの状態に応じて有効/無効にする必要があります。

少し遅れ
0

が、私は、私は似たようなエディットテキストやチェックボックスでレイアウトを作成し、このクラスを作成を作成することができたと思う:

public class CheckEditTextPreference extends DialogPreference { 
    protected static final String chkKey="ChkKey"; 
    private EditText editText; 
    private CheckBox checkBox; 
    private String etValue; 
    private boolean chkValue; 
    SharedPreferences mySharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext()); 

    public CheckEditTextPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 

    } 

    public CheckEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    protected View onCreateDialogView() { 
     FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
       ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); 
     layoutParams.setMargins(25, 0, 0, 0); 
     LinearLayout llChkEtPreference=new LinearLayout(getContext()); 
     llChkEtPreference.setOrientation(LinearLayout.VERTICAL); 
     llChkEtPreference.setLayoutParams(layoutParams); 
     checkBox=new CheckBox(getContext()); 
     editText = new EditText(getContext()); 
     editText.setLayoutParams(layoutParams); 
     checkBox.setLayoutParams(layoutParams); 
     checkBox.setText("Disabled"); 
     FrameLayout dialogView = new FrameLayout(getContext()); 
     llChkEtPreference.addView(editText); 
     llChkEtPreference.addView(checkBox); 
     dialogView.addView(llChkEtPreference); 
     checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       editText.setEnabled(!isChecked); 
      } 
     }); 
     return dialogView; 
    } 

    @Override 
    protected void onBindDialogView(View view) { 
     super.onBindDialogView(view); 
     checkBox.setChecked(getValueChk()); 
     editText.setText(getValueEt()); 
    } 

    @Override 
    protected void onDialogClosed(boolean positiveResult) { 
     if (positiveResult) { 
      String newValue = editText.getText().toString(); 
      boolean newValueChk=checkBox.isChecked(); 
      if (callChangeListener(newValue)) { 
       setValueEt(newValue); 
      } 
      if(callChangeListener(newValueChk)) 
      { 
       setValueChk(newValueChk); 
      } 
     } 
    } 

    @Override 
    protected Object onGetDefaultValue(TypedArray a, int index) { 
     return a.getString(index); 
    } 

    @Override 
    protected void onSetInitialValue(boolean restorePersistedValue, Object defaultValue) { 
     setValueEt(restorePersistedValue ? getPersistedString("") : defaultValue.toString()); 
     setValueChk(mySharedPreferences.getBoolean(chkKey, true)); 
    } 

    public void setValueEt(String value) { 
     this.etValue = value; 
     persistString(this.etValue); 
    } 

    public String getValueEt() { 
     return this.etValue; 
    } 
    public void setValueChk(boolean value) { 
     this.chkValue = value; 
     mySharedPreferences.edit().putBoolean(chkKey, this.chkValue).apply(); 
    } 

    public boolean getValueChk() { 
     return this.chkValue; 
    } 
} 

そして、あなたの好みにこれを入れては( "ことを覚えています。android.example.example.com.androiddemo」)パッケージの名前です:

<android.example.example.com.androiddemo.CheckEditTextPreference 
     android:key="chkEtPref" 
     android:title="Title"/> 

あなたがメインの活動では、この例のような何かを試すことができ、データを取得するには:

if(!mySharedPreferences.getBoolean(CheckEditTextPreference.chkKey, true)) 
    Toast.makeText(this, mySharedPreferences.getString("chkEtPref", "Testing"),Toast.LENGTH_LONG).show(); 

Disabled Enabled

関連する問題