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

时间:2016-04-19 00:56:47

标签: java android listadapter listpreference preferencefragment

我有一个自定义的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,所以我不能引用它(至少从我有限的知识)。有没有办法做到这一点?

1 个答案:

答案 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