能否自动滚动到偏好设置中所需的条目?(针对PreferenceFragment)

3
我正在使用startActivity(new Intent(this, SettingsActivity.class))从一个Activity调用我的应用程序的PreferenceFragment,当需要执行某些用户交互以进入首选项时。我认为滚动到相关的偏好设置会很好。
我找到了有关如何在ScrollViewListView中滚动视图的解决方案,但没有关于PreferenceFragment的内容。
我的首选项看起来像:
public class SettingsActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // ...

        PreferenceManager.setDefaultValues(this, R.xml.settings, false);

        getFragmentManager().beginTransaction()
            .replace(android.R.id.content, new SettingsFragment())
            .commit();
    }

    public static class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {

        //preferences:
        private Preference p
        // [...]

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.settings);

            //preference click listeners...
            p = (Preference) findPreference("PR_NAME");
            p.setOnPreferenceClickListener(new OnPreferenceClickListener() {

                public boolean onPreferenceClick(Preference preference) {
                    // ...
                    return true;
                }
            });
            // [...]
        }
    }
}

感谢您的任何建议。

嘿,陌生人!感谢您突然的UP点击。 - dentex
请查看此链接:https://dev59.com/Z1bUa4cB1Zd3GeqPBLVA#43055656 - Mark Hetherington
查看此链接:https://developer.android.com/reference/androidx/preference/PreferenceFragmentCompat.html#scrollToPreference(androidx.preference.Preference) - Elias Fazel
2个回答

6

要在PreferenceScreen(设置/首选项)中滚动,请使用Android API 24.1.+或使用androidX API

public void scrollToPreference (String key)

出于某种原因,如果您的首选项是动态创建的,则似乎无法正常工作。 - lasec0203
@lasec0203 使用这个 scrollToPreference(@NonNull Preference preference)。 - Elias Fazel

0

是的,这是可能的,但它是hacky的,因此不建议使用。它假定首选项由id == android.R.id.list的ListView支持,因此当您引用该ListView时,可以调用setSelection(position)


谢谢,基本上是我所思考的... 你能提供更多细节吗?与此同时,我将继续进行研究并发布任何更新。 - dentex
好的,只需使用findViewById(android.R.id.list)并将结果转换为ListView。 - pskink
就像我说的那样,这是一个hacky的方法,我已经在PreferenceActivity中测试过了,它可以正常工作。 - pskink
实际上,只需将public class SettingsActivity extends Activity更改为public class SettingsActivity extends PreferenceActivityfindViewById就会返回非空。太好了。现在我得找出为什么lv.smoothScrollToPosition(9)没有任何作用。;) - dentex
始终为 null?即使过了一段时间,即使在屏幕上看到您的首选项? - pskink
显示剩余4条评论

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