1

我在滚动视图中有一个片段。

加载片段时,滚动视图向下滚动到片段。

我想将片段加载到滚动视图中,但我不希望滚动视图在加载时从其当前位置(顶部)向下滚动到片段。

这就是我加载片段的方式:

  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()加载片段并移动屏幕以显示片段。

有没有办法将片段加载到滚动视图中,而不会将滚动视图移动到片段中,当它加载到滚动视图中时?

我认为答案在于找到一种方法来告诉FragmentManageror FragmentTransaction,只加载片段而不做任何转换。有什么建议吗??

4

2 回答 2

0

这很可能是由android:textIsSelectable. 您可以尝试将以下内容添加到ScrollView

android:focusable="true"
android:focusableInTouchMode="true"
android:descendantFocusability="beforeDescendants"
于 2015-05-21T04:56:14.607 回答
0

尽管有您的帮助,但我找不到解决问题的干净解决方案。

原因是,我的方法可能不正确(在滚动视图中包含一个片段并期望它不滚动)并且可能有更好的方法。

我所做的是解决我的问题,我强制滚动视图滚动到顶部,就在加载片段之后。所以用户看到滚动视图向下和向上滚动一次非常快。(我知道笨拙!)

这是我的代码:

 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 小部件的对象。

片段以及其他一些小部件位于此滚动视图内部。

于 2015-05-26T18:22:29.580 回答