我有一个自定义的preferencefragment,其中包含两个自定义列表首选项。由于两个列表的动态特性,每次加载我的父片段时,我都会通过创建自定义preferencefragment的新实例来刷新这两个片段:
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获取基础列表视图,只需执行平滑滚动(或类似)即可跳转到正确的列表项。但是,在我的情况下,没有列表视图ID,所以我不能引用它(至少从我有限的知识)。有没有办法做到这一点?
答案 0 :(得分:0)
view_of_referred_events
使用AlertDialog.Builder.setSingleChoiceItems()
,确保当前所选项目可见。所以,在您的情况下替换
date country_id referral product_id visitors
2016-04-01 216 pl 113759 1
2016-04-03 216 pl 113759 1
2016-04-06 216 pl 113759 13
2016-04-07 216 pl 113759 10
使用:
date country_id referral product_id cumulative_visitors
2016-04-01 216 pl 113759 1
2016-04-02 216 pl 113759 1
2016-04-03 216 pl 113759 2
2016-04-04 216 pl 113759 2
2016-04-05 216 pl 113759 2
2016-04-06 216 pl 113759 15
2016-04-07 216 pl 113759 25