Android 如何在不同的布局中更新TextView
如何从MyPreferenceFragment.java更新TextView genderTextView?Android 如何在不同的布局中更新TextView,android,android-layout,android-fragments,android-view,Android,Android Layout,Android Fragments,Android View,如何从MyPreferenceFragment.java更新TextView genderTextView? 提前谢谢你 gender.xml: I'm just trying to update TextView (@id/pref_gender_textView) in the "gender.xml" where gender.xml is defined in preference.xml. I'd like to update the TextView from MyPrefere
提前谢谢你
- gender.xml:
I'm just trying to update TextView (@id/pref_gender_textView) in the "gender.xml" where gender.xml is defined in preference.xml. I'd like to update the TextView from MyPreferenceFragment.java
Android框架负责将首选项保存在设备上应用程序的/data目录中的XML文件中。API提供了几种方法来处理存储的首选项 您确实不想在其他布局中更新TextView。这样做会在首选项视图和其他视图之间引入不必要的紧密耦合。您真正想要的只是在设置更改时更新TextView中的文本。这可以通过实现SharedReferences.OnSharedPreferenceChangeListener来实现。为此,请将您的活动注册为侦听器,例如:import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MyPreferenceFragment extends PreferenceFragment{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); /** Defining PreferenceChangeListener */ OnPreferenceChangeListener onPreferenceChangeListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { OnPreferenceChangeListener listener = ( OnPreferenceChangeListener) getActivity(); listener.onPreferenceChange(preference, newValue); return true; } }; } }
性别文本视图在哪里?其他活动的一部分还是什么?<?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <ListPreference android:key="lp_gender" android:entries="@array/array_lp_gender" android:entryValues="@array/array_lp_gender_values" android:title="@string/str_lp_android_choice_gender" android:layout="@layout/gender"/> </PreferenceScreen>
import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.Preference.OnPreferenceChangeListener; import android.preference.PreferenceFragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class MyPreferenceFragment extends PreferenceFragment{ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); /** Defining PreferenceChangeListener */ OnPreferenceChangeListener onPreferenceChangeListener = new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { OnPreferenceChangeListener listener = ( OnPreferenceChangeListener) getActivity(); listener.onPreferenceChange(preference, newValue); return true; } }; } }
public class YourActivity extends Activity implements OnSharedPreferenceChangeListener { private TextView mMyText; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); mMyText = (TextView) findViewById(android.R.id.my_text); // listen to preference changes SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); sharedPref.registerOnSharedPreferenceChangeListener(this); ... } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { if(key.equals(getString(R.string.pref_key_myText))){ mMyText.setText(sharedPreferences.getString(key, getString(R.string.pref_myText_defaultValue))); } } }