ViewPager内的ScrollView会自动滚动到中间

我有一个ViewPager包含同一个片段的几个实例,这个片段包含一篇文章。 文章视图层次结构非常简单,包括标题,横幅图像,副标题和正文; 除标题之外的所有内容都包含在scrollview中。

问题是 ,当您滑动到新页面时,片段会在顶部显示视图,然后立即滚动到容器的中间。 (事实上​​,它滚动到带有id: article_content的TextView的开头)

我已在问题的底部发布了布局。

现在,ViewPager设置了一个FragmentStatePagerAdapter的简单实现,这里是代码:

 class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { Bundle args; int count; public ScreenSlidePagerAdapter(FragmentManager fm) { super(fm); this.count = 8; } @Override public Fragment getItem(int position) { ArticleFragment mPrimaryFragment = new ArticleFragment(); args = new Bundle(); args.putString(ArticleFragment.KEY_ARTICLE_URL, mCurArticleLink); mPrimaryFragment.setArguments(args); return mPrimaryFragment; } @Override public int getCount() { return count; } } 

Fragment本身也很简单。 首先,我在onCreate期间检查是否有文章缓存,我调用onCreateView

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.apk_article_view, null); mTitle = (TextView) view.findViewById(R.id.article_title); mBanner = (ImageView) view.findViewById(R.id.article_banner); mSubTitle = (TextView) view.findViewById(R.id.article_subtitle); mContent = (TextView) view.findViewById(R.id.article_content); if (isArticleCached) { Constants.logMessage("Article is cached, loading from database"); setApkArticleContent(); } else { Constants.logMessage("Article isn't cached, downloading"); HtmlHelper.setApkArticleContent(mContext, mUrl, mTitle, mSubTitle, mContent, mBanner); setRefreshing(true); } return view; } 

值得注意的是, setApkArticleContent是一组简单的文本,没什么特别的:

 private void setApkArticleContent() { mTitle.setText(Html.fromHtml(mCursor.getString(mCursor.getColumnIndex(DbOpenHelper.TITLE)))); mSubTitle.setText(Html.fromHtml(mCursor.getString(mCursor.getColumnIndex(DbOpenHelper.SUBTITLE)))); mContent.setText(Html.fromHtml(mCursor.getString(mCursor.getColumnIndex(DbOpenHelper.BODY)))); UrlImageViewHelper.setUrlDrawable(mBanner, mCursor.getString(mCursor.getColumnIndex(DbOpenHelper.BANNER))); } 

此外,请知道我之前没有寻呼机 ,片段只被加载到一个空活动,并且无需滚动到scrollview的中间即可工作

我真的不确定触发滚动的是什么,是的,我知道我可以以编程方式将其设置为在加载后滚动回顶部,但是再次,当片段加载时它将是两个滚动动作并且它将是对用户来说非常明显。

你们有什么想法,为什么它会像这样? 关于如何阻止无意滚动的任何想法?

谢谢,

以下是ArticleFragment的布局:

            

这可能是由android:textIsSelectable引起的。 您可以尝试将以下内容添加到ScrollView:

 android:focusable="true" android:focusableInTouchMode="true" android:descendantFocusability="beforeDescendants" 

根据这个问题,将此属性值android:descendantFocusability="blocksDescendants"到ScrollView的子android:descendantFocusability="blocksDescendants" : 如何防止滚动视图在加载数据后滚动到webview?

我也有这个问题。 我通过将android:focusable="true"android:focusableInTouchMode="true"设置为ScrollView的LinearLayout中的第一个元素来解决它。

我试过解决方案:

 android:focusable=true android:focusableInTouchMode=true android:descendantFocusability=beforeDescendants 

我不知道为什么,但我不能用我的RelativeLayout这是父视图(这不起作用)。

我不得不将我的TextView包装在FrameLayout中,现在一切正常。 也许这有助于某人。

     

ViewPager内的ScrollView自动滚动但不会在中间滚动..看看这个。

 pager.setOnPageChangeListener(new OnPageChangeListener() { @Override public void onPageSelected(int position) { // TODO Auto-generated method stub int x=iv.getLeft(); int y=iv.getTop(); scroll.scrollTo(x, y); } 

pagerViewPager的对象, scrollScrollViewiv是任何ViewTextViewImageView

当我们在viewpager中更改页面时,滚动条会自动滚动但向左滚动。 如果你能find中间的解决方案,请告诉我.. 🙂

我尝试添加

  android:focusable="true" android:focusableInTouchMode="true" android:descendantFocusability="beforeDescendants" 

在根视图组中。 它的工作很好。 如下。