2015-09-09 26 views
6

私は、EditTextPreferenceのサポートバージョンを使用することを意味するアクセス許可チェックの実装にPreferenceFragmentCompatを使用するように変更しなければなりませんでした。残念ながら、getEditTextが見つからないようです。何か回避策はありますか?Android - EditTextPreferenceのgetEditTextメソッドがありません。

更新 見つけたissueが見つかりました。意図的に取り除かれたようですが、答えは私がしたいことを実行する方法を説明していません。

import android.support.v7.preference.EditTextPreference; 
import android.support.v7.preference.Preference; 
import android.support.v7.preference.PreferenceCategory; 
import android.support.v7.preference.PreferenceFragmentCompat; 

私のGradleは

compile 'com.android.support:support-v4:23.0.1' 
compile 'com.android.support:appcompat-v7:23.0.1' 
compile 'com.android.support:preference-v14:23.0.1' 
compile 'com.android.support:recyclerview-v7:23.0.1' 
+1

。受け入れられたソリューションのコード*バージョンから設定するのではなくXMLを使用して属性を設定すると、私はあなたの回避策を見てみることをお勧めします。**興味深いもの**:https://github.com/Gericop/Android-サポート - プリファレンス-V7-Fix –

+0

リンクのおかげで、属性だけでは対処できないものもありましたが、スタイリング要素が役立つでしょう。このサポートライブラリでどのくらい壊れているか驚くべきことです。 – CodeChimp

+0

私はGoogleにバグを報告しました。それに対処できるようにスター付きにしてください: https://code.google.com/p/android/issues/detail?id=233169&q=EditTextPreference&colspec=ID%20Status%20Priority%20Owner %20Summary%20Stars%20Reporter%20Opened –

答えて

0

カスタムEditTextPreference作成:

public class CustomEditTextPreference extends EditTextPreference { 
    public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr, 
     int defStyleRes) { 
     super(context, attrs, defStyleAttr, defStyleRes); 
    } 
    public CustomEditTextPreference(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 
    public CustomEditTextPreference(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    public CustomEditTextPreference(Context context) { 
     super(context); 
    } 
} 

がprefencesのためのXMLファイルにそれを宣言しました:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <com.example.CustomEditTextPreference 
     android:key="test_key" 
     android:title="Title" /> 
</PreferenceScreen> 

次の行を使用してPreferenceFragmentCompatを更新します。あなたはより強力な(*すなわちを使用したい場合は

public class PrefFragment extends PreferenceFragmentCompat { 

private static final String DIALOG_FRAGMENT_TAG = 
    "android.support.v7.preference.PreferenceFragment.DIALOG"; 

@Override 
public void onCreatePreferences(Bundle bundle, String s) { 
    addPreferencesFromResource(R.xml.settings); 
} 

@Override 
public void onDisplayPreferenceDialog(Preference preference) { 
    // check if dialog is already showing 
    if (getFragmentManager().findFragmentByTag(DIALOG_FRAGMENT_TAG) != null) { 
     return; 
    } 

    DialogFragment f = null; 
    if (preference instanceof CustomEditTextPreference) { 
     f = EditTextPreferenceDialog.newInstance(preference.getKey()); 
    } else { 
     super.onDisplayPreferenceDialog(preference); 
    } 
    if (f != null) { 
     f.setTargetFragment(this, 0); 
     f.show(getFragmentManager(), DIALOG_FRAGMENT_TAG); 
    } 
} 

public static class EditTextPreferenceDialog extends EditTextPreferenceDialogFragmentCompat { 

    public static EditTextPreferenceDialog newInstance(String key) { 
     final EditTextPreferenceDialog 
      fragment = new EditTextPreferenceDialog(); 
     final Bundle b = new Bundle(1); 
     b.putString(ARG_KEY, key); 
     fragment.setArguments(b); 
     return fragment; 
    } 

    @Override 
    protected void onBindDialogView(View view) { 
     super.onBindDialogView(view); 
     ((EditText)view.findViewById(android.R.id.edit)).setFilters(new InputFilter[]{new NumericRangeFilter()}); 
    } 

} 

}

+0

Preference Support Lib内にEditTextPreferenceのgetDialogはありません。私は自分自身で同様の行を考えていました。 – CodeChimp

+0

私は答えを更新しました。これで動作するはずです –

+0

私はこれを実装し、私がデバッグするときにinitとonFocusChangeが呼び出されるのを見ることができます。しかし、それは嗜好から値を得ないか、OKを押したときにそれを設定するので、サマリー/永続的な嗜好は更新されません。確かに何か他のものが実装される必要がありますが、何がわかりません。 – CodeChimp

-1

getEditText(依存関係

final EditText editTextTL; 
editTextTL = ((EditTextPreference) findPreference("my_preference")).getEditText(); 
editTextTL.setFilters(new InputFilter[]{new NumericRangeFilter()}); 
editTextTL.setOnFocusChangeListener(new AmountOnFocusChangeListener()); 

私の関連輸入)サポートライブラリ

に欠落していない、次のように私が使っていたコードがあります

があなたのサポートライブラリのバージョンを確認してください、リンク https://github.com/consp1racy/android-support-preference/blob/master/library/src/main/java/net/xpece/android/support/preference/EditTextPreference.java

あなたがのEditTextを得ることができますを確認し

+0

ライブラリがandroid.support.v7.widget.AppCompatEditTextを使用しています。 PreferenceFragmentCompat内のfindPreferenceはその型にキャストできません。 私はcom.android.support:preference-v14:23.0.1を使用しています – CodeChimp

+2

これは公式のサポートライブラリではありません。 –

関連する問題