ScrollView in ViewPager, blättert automatisch nach Mitte

Ich habe einen ViewPager, der mehrere Instanzen des gleichen Fragments enthält, dieses Fragment enthält einen Artikel. Die Artikelansichthierarchie ist ganz einfach, ein Titel, ein Bannerbild, ein Untertitel und ein Körper; Alles, aber der Titel ist in einer Scrollview verpackt.

Das Problem ist , wenn man auf eine neue Seite wechselt, wird das Fragment mit den Ansichten an der Spitze präsentiert und dann geht es sofort in die Mitte des Containers. (In der Tat rollt es zum Anfang der TextView mit id: article_content )

  • Android - wie man eine Item-Klick-Methode zu einem ArrayAdapter hinzufügt
  • Android Fragment und getWindow ()
  • Android / iOS - Benutzerdefinierte URI / Protokoll Handhabung
  • JQuery Mobile native select funktioniert nicht auf Droiden
  • Android Anhängen einer Datei an GMAIL - Kann keine leere Datei anhängen
  • 'Vorschau Zeitüberschreitung beim Rendering der Layout Endlosschleife oder unbegrenzte Rekursion', wenn ich einige TableRup dupliziert
  • Ich habe das Layout am Ende der Frage gepostet.

    Jetzt ist der ViewPager mit einer einfachen Implementierung eines FragmentStatePagerAdapter , hier ist der Code:

     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; } } 

    Das Fragment selbst ist auch ziemlich einfach. Zuerst überprüfe ich während onCreate zu sehen, ob wir den Artikel zwischengespeichert haben, den ich auf 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; } 

    Es ist erwähnenswert, dass setApkArticleContent ein einfacher Satz von Texten ist, nichts Besonderes:

     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))); } 

    Auch bitte weiß, dass ich noch keinen Pager hatte , das Fragment wurde nur in eine leere Aktivität geladen, und es funktionierte ohne zu scrollen, um die Mitte der Scrollview .

    Ich bin wirklich nicht sicher, was die Schriftrolle auslöst, und ja, ich weiß, dass ich es programmatisch einstellen kann, um nach dem Laden wieder nach oben zu blättern, aber dann wäre das mal zwei Scroll-Bewegungen, wenn das Fragment geladen ist und es wäre Für den Benutzer sehr spürbar.

    Hast du irgendwelche Ideen, warum es sich so verhalten würde? Irgendwelche Ideen, wie ich diese unbeabsichtigte Rolle stoppen kann?

    Vielen Dank,

    Unten ist das Layout für die ArtikelFragment:

     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/article_title" style="@style/headerTextBoldNoUnderline" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="left|center_vertical" android:text="" /> <ScrollView android:layout_height="match_parent" android:layout_width="match_parent" > <LinearLayout android:orientation="vertical" android:layout_height="wrap_content" android:layout_width="match_parent" > <ImageView android:id="@+id/article_banner" android:layout_gravity="center_vertical|center_horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="12dp" /> <TextView android:id="@+id/article_subtitle" style="@style/HeaderTextItalicNoUnderline" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="left|center_vertical" /> <View android:layout_width="fill_parent" android:layout_height="1dp" android:background="?android:attr/dividerVertical" /> <TextView android:id="@+id/article_content" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif-light" android:gravity="left|center_vertical" android:padding="8dp" android:textColor="?android:attr/textColorSecondary" android:textIsSelectable="true" android:textSize="16sp" /> </LinearLayout> </ScrollView> </LinearLayout> 

  • OnEditorActionListener funktioniert nicht
  • Läuft Android Studio auf Windows 7 fehlschlägt, kein Android SDK gefunden
  • StartService von der Klasse, die die Aktivität nicht verlängert
  • Android TabWidget White Space Issue
  • Dynamische Layouts als statische Layouts
  • Verwalten von Remote-Service-Rückrufen
  • 6 Solutions collect form web for “ScrollView in ViewPager, blättert automatisch nach Mitte”

    Dies ist wahrscheinlich verursacht durch android:textIsSelectable . Sie können versuchen, das folgende dem ScrollView hinzuzufügen:

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

    Fügen Sie diesen Attributwert android:descendantFocusability="blocksDescendants" an das Kind von ScrollView, nach dieser Frage: Wie kann ich verhindern, dass ein Scrollview nach dem Laden in ein Webview scrollt?

    Ich hatte auch dieses Problem. Ich löste es mit der Einstellung android:focusable="true" und android:focusableInTouchMode="true" zum ersten Element im ScrollView's LinearLayout.

    Ich habe versucht:

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

    Und ich weiß nicht, warum, aber ich kann das nicht mit meinem RelativeLayout tun, was die übergeordnete Ansicht ist (dies funktioniert nicht).

    Ich musste meine TextView in FrameLayout einpacken und jetzt ist alles in Ordnung. Vielleicht hilft das jemand.

      <FrameLayout android:id="@+id/detail_description_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/detail_parameters_container" android:layout_centerInParent="true" android:descendantFocusability="beforeDescendants" android:focusable="true" android:focusableInTouchMode="true" > <TextView android:id="@+id/detail_descritpion" android:layout_width="match_parent" android:layout_height="wrap_content" android:autoLink="all" android:padding="10dp" android:textIsSelectable="true" /> </FrameLayout> 

    ScrollView in ViewPager blättert automatisch, blättert aber nicht in der Mitte. Schau ViewPager das an.

     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); } 

    pager ist ViewPager 's Objekt und scroll ist ScrollView und iv ist jede View sagen TextView oder ImageView .

    Wenn wir die Seite im Viewpager ändern, blättert die Bildlaufleiste automatisch, aber nach links. Wenn du eine Lösung gefunden hättest, dann lass es mich wissen … 🙂

    Ich versuche hinzuzufügen

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

    In der Root-ViewGroup. Es ist gut. Wie unten

      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:focusable="true" android:focusableInTouchMode="true" android:descendantFocusability="beforeDescendants" android:background="@color/normal_bg"> <ScrollView android:id="@+id/scroll" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/rl_enter" android:scrollbars="none"> </ScrollView> </RelativeLayout> 
    Das Android ist ein Google Android Fan-Website, Alles über Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.