我有一个偏好片段,我在此调用setOnClickListener()
作为偏好,并覆盖onPreferenceClick()
方法。但是,当单击首选项时,我的新方法不会被调用。Android OnPreferenceClick不会在点击时调用
我可以通过将代码移动到我自定义的EditTextPreference
类中来获得ClickListener
的工作方式,但必须启用首选项才能激发侦听器。
我想使用此首选项作为标签来显示值并单击它以显示选项以更改它。我不希望用户直接编辑它。
我该如何做到这一点?
代码是如下
public class PrefActivity extends PreferenceActivity {
static final String TAG="Preference Activity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MyPreferenceFragment()).commit();
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
}
public static class MyPreferenceFragment extends PreferenceFragment
{
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
Preference clickedPreference = (Preference) findPreference("userLocation");
clickedPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// TODO Auto-generated method stub
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(preference.getContext());
boolean locationTypeSetting;
LocationSetting locationSetting = new LocationSetting(preference.getContext());
String clickedPreference = preference.getKey();
if (clickedPreference.equals("userLocation")){
locationTypeSetting = settings.getBoolean("locationSetting", false);
if (locationTypeSetting == true)
{
AlertDialog.Builder noEditDialogBuilder = new AlertDialog.Builder(preference.getContext());
noEditDialogBuilder.setTitle(R.string.no_edit_dialog_title);
noEditDialogBuilder
.setMessage(R.string.no_edit_dialog_message)
.setPositiveButton(R.string.no_edit_dialog_positive_action,null);
AlertDialog noEditDialog = noEditDialogBuilder.create();
noEditDialog.show();
}
else
locationSetting.displayMap(0);
}
return false;
}
});
}
}
}
我的偏好XML
<SwitchPreference
android:defaultValue="0"
android:key="locationSetting"
android:summary="Automatic Location"
android:switchTextOff="OFF"
android:switchTextOn="ON" />
<com.example.test.EditTextPreferenceWithSummary
android:key="userLocation"
android:title="Address"
android:shouldDisableView="false"
android:enabled="false"
android:selectable="true" />
我EditTextPreferenceWithSummary类
public class EditTextPreferenceWithSummary extends EditTextPreference {
private final static String TAG = EditTextPreferenceWithSummary.class.getName();
@Override
protected View onCreateView(ViewGroup parent) {
this.setSummary(this.getText());
return super.onCreateView(parent);
}
public EditTextPreferenceWithSummary(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public EditTextPreferenceWithSummary(Context context) {
super(context);
init();
}
private void init() {
Log.e(TAG, "init");
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this.getContext());
String currentText = prefs.getString("userLocation", this.getText());
this.setSummary(currentText);
setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
preference.setSummary(newValue.toString());
return true;
}
});
}
}
我删除了片段,并直接使用类。还是同样的问题
代码是如下
public class PrefActivity extends PreferenceActivity {
static final String TAG="Preference Activity";
@SuppressWarnings("deprecation")
@Override
public void onCreate(final Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
Preference clickedPreference = (Preference) findPreference("userLocation");
clickedPreference.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
// TODO Auto-generated method stub
SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(preference.getContext());
boolean locationTypeSetting;
LocationSetting locationSetting = new LocationSetting(preference.getContext());
String clickedPreference = preference.getKey();
if (clickedPreference == "userLocation"){
locationTypeSetting = settings.getBoolean("locationSetting", false);
if (locationTypeSetting == true)
{
AlertDialog.Builder noEditDialogBuilder = new AlertDialog.Builder(preference.getContext());
noEditDialogBuilder.setTitle(R.string.no_edit_dialog_title);
noEditDialogBuilder
.setMessage(R.string.no_edit_dialog_message)
.setPositiveButton(R.string.no_edit_dialog_positive_action,null);
AlertDialog noEditDialog = noEditDialogBuilder.create();
noEditDialog.show();
}
else
locationSetting.displayMap(0);
}
return false;
}
});
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
}
}
标记为非建设性的,因为,除非你有一个问题,你应该看看[Android的参考](http://developer.android.com/reference/android/preference/PreferenceFragment.html) – verybadalloc
我有一个问题,这就是为什么我问我的问题。我不理解评论。 – user2516536
欢迎来到Stack Overflow。不幸的是,您没有提供足够的信息来帮助我们。请阅读[这些建议](http://stackoverflow.com/help/how-to-ask)以改善您的问题。您提出的问题越多,您就越有可能提供您正在寻找的答案。 –