Android应用程序有一些非常长的首选项屏幕,它始终在首选项菜单的顶部打开。我知道用户想要在首选项菜单中的位置。如何强制首选项屏幕打开滚动到特定的首选项?
答案 0 :(得分:2)
我知道这是旧的,所以这个答案仅供参考。
要自动选择给定的屏幕,您只需要setPreferenceScreen()
(这适用于预蜂窝非片段PreferenceActivity)。
一旦使用了正确的PreferenceScreen,您确实可以使用getListView().smoothScrollToPosition(position)
(但这是一个Froyo +方法),或者您可以使用getListView.setSelection(position)
。
但如何获得这个职位?
首先,注意陷阱:PreferenceActivity.getListAdapter()
不返回实际的ListAdapter,而是一个令人不安地与PreferenceActivity.getListView().getAdapter()
不一致的本地实例变量(通常为null)。
其次,尝试使用Preference.getOrder()
会返回其父级中Preference对象的顺序,只有在您不使用PreferenceCategories
时,才能将该位置用于位置/ strong>因为你需要的是它在PreferenceScreen中的顺序。
如果您使用的是PreferenceCategories,则需要迭代适配器中的项目for (int i = 0; i < adapter.getCount(); i++)
,直到找到合适的项目并使用其位置。
Android SDK的另一个角落迫切需要引起注意......
答案 1 :(得分:1)
将此功能添加到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");
答案 2 :(得分:0)
由于PreferenceActivity扩展了ListActivity,您可以调用getListView()
来获取包含您的首选项的ListView,然后使用listView.smoothScrollToPosition()
滚动到列表中的特定行。我以前没有尝试过这个,但它应该有用。
答案 3 :(得分:0)
您可以只使用scrollToPreference
:
示例:
scrollToPreference(preferenceKey)
或:
scrollToPreference(preference)