我在滚动视图中有一个片段。
加载片段后,滚动视图会向下滚动到片段。
我想将片段加载到滚动视图中,但我不希望滚动视图在加载时从其当前位置(顶部)向下滚动到片段。
这是我加载片段的方式:
android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(bikeFragContainer.getId(),bikeFrag);
ft.show(bikeFrag);
ft.commit();
setBikeFragData();
在我看来滚动的原因是,ft.commit()
加载片段并移动屏幕以显示片段。
当将片段加载到滚动视图中时,是否有任何方法可以将片段加载到滚动视图中而不将滚动视图移动到片段?
我认为答案在于找到告诉FragmentManager
或FragmentTransaction
的方法,只需加载片段但不进行任何转换。有什么建议吗?
答案 0 :(得分:0)
这可能是由android:textIsSelectable
引起的。您可以尝试将以下内容添加到ScrollView
:
android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants"
答案 1 :(得分:0)
尽管你提供了帮助,但我无法为我的问题找到一个干净的解决方案。
原因是,我的方法可能不是正确的(在scrollview中包含片段并期望它不滚动)并且可能有更好的方法。
我所做的是修复我的问题,我强制滚动视图,在片段加载后立即滚动到顶部。因此,用户看到滚动视图向下滚动一次非常快。(我知道笨拙!)
这是我的代码:
android.support.v4.app.FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(mGridContainer.getId(),bikeFrag);
ft.commit();
setBikeFrag();
scrollView.postDelayed(new Runnable() {
@Override
public void run() {
scrollView.smoothScrollTo(0, 0); // scrolls to top of scrollview
}
}, 1000);
我在片段事务发生后等待一秒钟并滚动到顶部。
可能会减少这种延迟,但我保持一秒钟,只是为了安全。
scrollView
是我的布局中ScrollView小部件的对象。
在此滚动视图中,片段以及其他一些小部件都位于其中。