Android应用程序有一些非常长的首选项屏幕,它始终打开在首选项菜单的顶部。我有一些想法,用户想要在偏好菜单中。如何强制首选项屏幕打开滚动到特定首选项?如何设置滚动位置长PreferenceScreen
回答
由于PreferenceActivity扩展了ListActivity,因此您可以调用getListView()
以获取包含您的首选项的ListView,然后使用listView.smoothScrollToPosition()
滚动到列表中的特定行。我以前没有尝试过,但应该可以。
我知道这是一个旧的,所以这个答案仅供参考。
要自动选择给定的屏幕,你所要做的就是setPreferenceScreen()
(这是用于蜂窝前非Fragment PreferenceActivity)。一旦你在正确的PreferenceScreen上,你确实可以使用getListView().smoothScrollToPosition(position)
(但这是一个Froyo +方法),或者你可以使用getListView.setSelection(position)
。
但是如何获得这个位置?
首先,注意陷阱:PreferenceActivity.getListAdapter()
不会返回实际的ListAdapter,而是一个本地的实例变量,与PreferenceActivity.getListView().getAdapter()
(通常为空)不同步,令人不安。
其次,试图用Preference.getOrder()
返回其父,内优先对象的顺序是你想,因为你需要使用的位置只有当你不使用PreferenceCategories
什么是它的内部秩序PreferenceScreen。
如果您正在使用PreferenceCategories,你需要(遍历适配器中的项目for (int i = 0; i < adapter.getCount(); i++)
,直到找到合适的人,并使用它的位置。
了Android SDK的另一个角落中的迫切需要一些关注...
添加此功能,您PreferenceFragment
public void scrollToItem(String preferenceName) {
ListView listView = ButterKnife.findById(getView(),android.R.id.list);
Preference preference = findPreference(preferenceName);
if (preference != null && listView != null) {
for (int i = 0; i < listView.getAdapter().getCount(); i++) {
Preference iPref = (Preference) listView.getAdapter().getItem(i);
if (iPref == preference) {
listView.setSelection(i);
break;
}
}
}
}
比方说你的settings.xml这个
<Preference
android:icon="@drawable/ic_action_email"
android:key="emailSupport"
android:title="@string/email_support" />
您可以拨打
scrollToItem("emailSupport");
- 1. 如何设置UIScrollView的滚动位置?
- 2. 滚动窗格设置滚动位置
- 3. 设置滚动位置
- 4. 如何设置div内滚动div的滚动位置?
- 5. 页面滚动时设置div位置
- 6. 设置滚动条的位置
- 7. CSS设置默认滚动位置
- 8. 设置一个滚动条的位置
- 9. 设置滚动回到其位置
- 10. 在wxpython中设置滚动位置
- 11. 将滚动位置设置为RecyclerView
- 12. 设置列表框的滚动位置
- 13. 设置ListBox的滚动条位置
- 14. 在WinJS.UI.ListView中设置滚动位置
- 15. 根据滚动设置div的位置
- 16. 如何重置UITableView的滚动位置?
- 17. 如何将滚动条设置为顶部/忘记滚动位置
- 18. 如何将UITableView的滚动位置设置为ios中的上一个位置
- 19. 我如何首先捕捉并设置滚动条的位置?
- 20. 如何在VB.NET中设置垂直滚动条的位置?
- 21. 如何在uiwebview上设置滚动位置
- 22. 如何更改设置位置的滚动条轨道颜色?
- 23. 如何设置网页的滚动条位置
- 24. 如何在vb.net中设置滚动条位置?
- 25. 如何在表格中设置滚动位置?
- 26. 如何使用caliburn.micro设置视图模型的滚动位置?
- 27. 如何获取并设置当前网页滚动位置?
- 28. 设置滚动位置没有设置默认时间
- 29. jCarousel重置滚动位置
- 30. NSScrollView滚动位置
不幸的是,这是一个子屏幕,而不是主要活动画面。所以现在的问题是,我怎样才能获得与PreferenceScreen相关的视图或活动。我试图将其子类并覆盖bind()方法,但是darn类声明为final,不能被子类化:( 其他任何明智的想法???? – kencorbin 2011-05-12 01:20:40
当你说子屏幕时,你是什么意思?一个完全不同的PreferenceScreen,或者它是PreferenceScreen的子视图? – BigFwoosh 2011-05-12 13:47:32
kencorbin,我需要同样的东西!你能找到解决方案吗? – 2011-10-26 02:10:55