2015-09-09 35 views
6

我剛剛更改爲使用PreferenceFragmentCompat實現權限檢查,這意味着使用支持版本的EditTextPreference。不幸的是,似乎getEditText丟失。有什麼解決辦法嗎?Android - 在首選支持庫中沒有getEditText方法在EditTextPreference中

更新 找到這個issue登錄。似乎它被故意刪除,但答案並不解釋如何實現我想要做的事情。

我使用的代碼如下

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

我有關進口

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

我的搖籃相依

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- Support-Preference-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); 
    } 
} 

聲明它的使用偏好的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()的支持庫

都不缺

檢查鏈接 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

這不是官方的支持庫。 –

相關問題