2015-09-09 8 views
6

Ich musste nur auf PreferenceFragmentCompat für die Implementierung von Berechtigungen überprüfen, was bedeutet, die Verwendung der Support-Version von EditTextPreference. Leider scheint es, dass getEditText fehlt. Gibt es Arbeit?Android - Keine getEditText-Methode in EditTextPreference mit Preference Support Library

Aktualisierung Gefunden diese issue protokolliert. Scheint, es wurde absichtlich entfernt, aber die Antwort erklärt nicht, wie man das umsetzt, was ich tun möchte.

Der Code, den ich wurde mit wie

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

Meine relevanten Einfuhren

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

Meine Gradle Abhängigkeiten

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

Wenn Sie einen leistungsfähigeren verwenden möchten (* d. Verwenden von XML zum Festlegen von Attributen statt Einstellung von Code *) Version der akzeptierten Lösung, empfehle ich Ihnen, einen Blick auf meine Workarounds ** Interessante Dinge ** Teil: https://github.com/Gericop/Android- Support-Preference-V7-Fix –

+0

Danke für den Link, ich musste einige Dinge tun, die Attribute allein nicht bewältigen würden, aber die Styling-Elemente werden nützlich sein. Erstaunlich, wie viel mit dieser Support-Lib kaputt ist. – CodeChimp

+0

Ich habe einen Bug für Google gemeldet, bitte markieren Sie ihn so, dass er bearbeitet werden kann: https://code.google.com/p/android/issues/detail?id=233169&q=EditTextPreference&colspec=ID%20Status%20Priority%20Owner % 20Summary% 20Stars% 20Reporter% 20Opened –

Antwort

0

Erstellen von benutzerdefinierten EditTextPreference überprüfen:

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

es für prefences in XML-Datei erklären:

<?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> 

Aktualisieren Sie Ihre PreferenceFragmentCompat mit den folgenden Zeilen:

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

Es gibt auch keinen getDialog für EditTextPreference in der Preference Support Lib, ich dachte selbst über ähnliche Zeilen nach. – CodeChimp

+0

Ich habe die Antwort aktualisiert. Es sollte jetzt funktionieren –

+0

Ich habe dies implementiert und kann die init und onFocusChange aufgerufen werden, wenn ich debuggen. Es wird jedoch nicht der Wert aus der Vorgabe abgerufen oder festgelegt, wenn OK gedrückt wird, damit meine Zusammenfassung/beibehaltene Einstellung nicht aktualisiert wird. Sicher muss etwas anderes implementiert werden, aber nicht sicher was. – CodeChimp

-1

GetEditText() nicht in der Support-Bibliothek fehlt

die Verbindung überprüfen https://github.com/consp1racy/android-support-preference/blob/master/library/src/main/java/net/xpece/android/support/preference/EditTextPreference.java

Sie können EditText bekommen,

bitte die Version Ihrer Support-Bibliothek

+0

Ich sehe, dass die Bibliothek android.support.v7.widget.AppCompatEditText verwendet; findPreference in PreferenceFragmentCompat kann nicht in diesen Typ umgewandelt werden. Ich benutze com.android.support:reference-v14:23.0.1 – CodeChimp

+2

Dies ist nicht die offizielle Support-Bibliothek. –

Verwandte Themen