Noa*_*oah 2 android android-preferences
我的应用程序有一个ListPreference,其条目来自网络API.在我的PreferenceActivity的onCreate()中,我生成了一个后台线程,它进行API调用,然后在一两秒后填充ListPreference的条目.
如果用户在下载选项之前单击首选项屏幕上的ListPreference按钮,我想阻止显示首选项对话框,而是通知用户仍在加载选项列表.
我怀疑正确的方法是覆盖OnPreferenceClickListener,如下所示:
ListPreference dpref = (ListPreference) findPreference("debug");
String[] s = {"one", "two", "three"};
dpref.setEntries(s);
dpref.setEntryValues(s);
dpref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
Toast.makeText(this, "hi there", Toast.LENGTH_SHORT).show();
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
将显示toast,但也会显示ListPreference选择器对话框.该OnPreferenceClickListener文件说,onPreferenceClick应该返回true
如果点击被处理,但返回false
具有相同的效果.
如何阻止首选项对话框显示?
是否有更好的方法来处理在查看之前必须下载选项的首选项?
我遇到了同样的问题,但是在一个更简单的环境中.我的PreferenceScreen在xml文件中定义.我想要处理一个偏好.所以我只是将一个"Preference"对象放入xml文件而不是"ListPreference"或"EditTextPreference"
<Preference android:title="@string/preloadmaps1" android:summary="@string/preloadmaps2"
android:key="preloadMaps" />
Run Code Online (Sandbox Code Playgroud)
现在没有更多的编辑器与Preference相关联,我可以在"OnPreferenceClickListener"中自救地处理编辑
关于showDialog参考android dveloper文件:
显示与此首选项关联的对话框.这通常是在单击首选项时自动启动的.如果需要在其他事件上显示对话框,请调用此方法.
因此,当click click将自动调用showDialog()时,如果要控制以防止在单击首选项上显示对话框,则需要实现自定义首选项,如下所示,
public class MyPreference extends ListPreference {
private Context context;
// a flag to control show dialog
private boolean showDialog = false;
public MyPreference(Context context) {
super(context);
this.context = context;
}
public MyPreference(Context context, AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
@Override
protected void showDialog(Bundle state) {
if (showDialog) {
// show dialog
super.showDialog(state);
} else {
// if you don't want to show a dialog when click preference
return;
} /* end of if */
}
}
Run Code Online (Sandbox Code Playgroud)