7
我有一个自定义preferencefragment,其中包含两个自定义列表首选项。由于两个列表的动态性质,我的每一位家长片段被加载时,我通过创建自定义preferencefragment的新实例刷新这两个片段:滚动到/设置自定义列表首选项的位置
if(themeListFragment != null) {
themeListFragment = new ThemeListFragment();
//init fragment
getFragmentManager().beginTransaction()
.replace(R.id.themeFragmentCont, themeListFragment)
.commit();
}
这完美的作品,并呈现自定义列表的喜好。这两个名单偏好每个由自定义listpreference定义:
//setup themes list
if(lp == null) {
lp = (ThemeListPreference) findPreference("theme_list");
lp.setOnPreferenceChangeListener(this);
refreshThemes();
}
我定制listpreference几乎已经创建对话框之前做一些操作,因此它将覆盖方法:
@Override
protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
int index = preferences.getInt(getContext().getString(R.string.theme_id),getContext().getResources().getInteger(R.integer.default_theme_id));
System.out.println(index);
ListAdapter listAdapter = new ThemeListAdapter(getContext(),
R.layout.image_list_row, this.getEntries(),
themes, index,
this);
builder.setAdapter(listAdapter, this);
super.onPrepareDialogBuilder(builder);
}
一切正常从开始到结束都很棒,但是当列表变得足够长时,滚动成为一个问题,因为列表弹出不会自动滚动到所选的首选项。
针对此问题的所有网络帖子均假设您可以通过id获取基础列表视图,只需执行平滑滚动(或类似)即可跳转到正确的列表项目。然而,在我的情况下,没有一个列表视图ID,所以我不能引用它(至少从我有限的知识)。有没有可能的方法来做到这一点?
感谢您的建议 - 名单似乎有但不幸的完全相同的功能。它仍然在列表顶部呈现,并且需要向下滚动才能看到选定的项目。 – runfaj
奇怪的是,我可以看到你的情况唯一的区别是我分类'DialogPreference'而不是'ListPreference',因为我有'ListPreference'处理标签和值列表的方式问题 – bwt