Как получить идентификатор элементов макета EditTextPreference
У меня есть EditPreferences.class, который расширяет preferenceacctivity и мой макет preferences.xml в моей папке xml в макете xml. Я использовал элемент управления EditTextPreference с макетом et_layout.xml. Мой вопрос: как мне получить идентификатор textview в моем EditPreferences.class?
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/app_name" >
<PreferenceCategory
android:icon="@drawable/batitle"
android:textColor="#000000"
android:title="كۆرۈنۈش" >
<ListPreference
android:defaultValue="@string/result_fontsize_default"
android:dialogTitle="تاللاڭ"
android:entries="@array/result_fontsize_keys"
android:entryValues="@array/result_fontsize_values"
android:key="result_fontsize"
android:summary="ئىزدەش نەتىجىسىنىڭ كۆرۈنۈش چوڭلۇقى"
android:textColor="#000000"
android:title="خەت چوڭلۇقى" />
<EditTextPreference
android:dialogIcon="@drawable/batitle"
android:dialogTitle="editText"
android:key="tel"
android:layout="@layout/layout" />
<Preference />
</PreferenceCategory>
</PreferenceScreen>
расположение
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="right"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="TextView" />
</LinearLayout>
<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
</LinearLayout>
3 ответа
Попробуй это,
SharedPreferences prefs;
String x = prefs.getString("tel",defaultString value);
textView.setText(x);
Надуть тебя xml
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.linear_layout, null);
textView2 = (TextView) view.findViewById(R.id.textView2);
Попробуйте это, надеюсь, это поможет вам
Причина, по которой простой findViewById в вашем EditPreferences.onCreate не работает, заключается в том, что ваш макет с TextView создается внутри ListView, и существует задержка, прежде чем это действительно произойдет при запуске действия.
Я не уверен, что это лучший способ, но один из способов обработки события заполнения элемента ListView - обработка события OnHierarchyChange для объекта ListView. Если вы поместите это в свой onCreate, после того, как макет предпочтения был загружен из того, что я предполагаю, является вызовом addPreferencesFromResource, он должен работать.
ListView list = (ListView) findViewById(android.R.id.list);
list.setOnHierarchyChangeListener(new ViewGroup.OnHierarchyChangeListener() {
@Override
public void onChildViewAdded(View parent, View child) {
TextView text = (TextView) child.findViewById(R.id.textView2);
if (text != null) {
text.setText("Something else here");
}
}
@Override
public void onChildViewRemoved(View view, View view2) {
}
});