gpt4 book ai didi

java - 滚动到/设置自定义列表首选项的位置

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:42:39 25 4
gpt4 key购买 nike

我有一个包含两个自定义列表首选项的自定义首选项 fragment 。由于这两个列表的动态特性,每次加载我的父 fragment 时,我都会通过创建自定义 preferencefragment 的新实例来刷新这两个 fragment :

if(themeListFragment != null) {
themeListFragment = new ThemeListFragment();
//init fragment
getFragmentManager().beginTransaction()
.replace(R.id.themeFragmentCont, themeListFragment)
.commit();
}

这完美地工作并呈现自定义列表首选项。这两个列表首选项中的每一个都由自定义列表首选项定义:

//setup themes list
if(lp == null) {
lp = (ThemeListPreference) findPreference("theme_list");
lp.setOnPreferenceChangeListener(this);
refreshThemes();
}

我的自定义列表首选项主要用于在创建对话框之前执行一些操作,因此它覆盖了该方法:

@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 获取基础 ListView ,只需进行平滑滚动(或类似操作)即可跳转到正确的列表项。但是,就我而言,没有 ListView ID,因此我无法引用它(至少从我有限的知识来看)。有什么办法可以做到这一点吗?

最佳答案

ListPreference 使用 AlertDialog.Builder.setSingleChoiceItems() , 以确保当前选定的项目可见。所以,在你的情况下替换

builder.setAdapter(listAdapter, this);

与:

builder.setSingleChoiceItems(listAdapter, index, this);

关于java - 滚动到/设置自定义列表首选项的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36706687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com