Android,当ListPreference项目被点击时显示对话框

3
基本上,我有一个ListPreference来允许用户更改我的动态壁纸上某些文本的X位置。它包含4个条目:顶部,中间,底部和手动输入的X。前三个选项没有问题,我只需在WallpaperService类中获取SharedPreferences并检查它们是否是顶部,中部或底部,然后根据其选择改变位置。然而,最后一个选项更加困难,我想做的是当用户点击“手动输入X” ListPreference项时弹出一个EditText警报框,以便他们可以为X输入一个值。我只是无法弄清楚如何从单击该特定列表元素使警报弹出。
2个回答

3
您可能想创建一个自定义的ListPreference。基本上,您需要从ListPreference继承(请参见原始这里),并提供一个自定义的protected void onPrepareDialogBuilder(Builder builder),在其中提供额外的“自定义”列表项和处理“自定义”条目选择的onclick事件。
请注意,我不断地说“自定义”,因为最好将此类尽可能地设计为可重用的。

那么,在原始的ListPreference中,没有办法为ListPreference中特定项设置onClick方法吗? - William Stewart
我认为不是这样,因为对话框和选择的创建都由你无法控制的代码处理。听起来可能会很麻烦,但实际上并没有那么糟糕。额外的代码很少,并且封装在自定义类中。 - dmon
好的,我只是想了解自定义类如何工作。我不知道在onPrepareDialogBuilder方法中应该放什么来得到我需要的东西。如果这很简单但我的头脑一片空白,有什么提示吗? - William Stewart
复制 onPrepareDialogBuilder,然后通过调用 getEntries() 获取条目并在末尾添加一个新项,然后将其传递到 builder.setSingleChoiceItems() 中。然后 onclick 有 which,它是被点击的项目的索引。请注意,您可能需要以某种编码方式存储数据,以便支持自定义值,因为默认实现仅存储所选项目的整数值。 - dmon
这是我目前拥有的,这是你想要的内容吗?`@Override protected void onPrepareDialogBuilder(Builder builder) { CharSequence entry = text; entries = this.getEntries(); entries[entries.length-1] = entry; builder.setSingleChoiceItems(entries, 0, new OnClickListener(){ @Override public void onClick(DialogInterface dialog, int which) { if (which == entries.length) {} } }); }` - William Stewart
显示剩余8条评论

0

在你的PreferenceActivity中重写onPreferenceTreeClick()方法,并将其提供的首选项与你想要执行某些操作的首选项进行比较。


我需要把这个放在onPreferenceClickListener里面吗?还是它会自己放在PreferenceActivity类中? - William Stewart
好的,我已经完成了,但它获取整个ListPreference的点击事件,而不是特定项目的。 - William Stewart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接