2016-07-04 7 views
1

Ich habe Rasteransicht und Listview (einschließlich Seitenumbruch) in Scrollview.So machen Sie den gesamten Bildschirm scrollbar in Viewpager Fragment

Dies ist die resultierende einzelne Bildlauf, aber ich brauche den gesamten Bildschirm scrollbar mit Seitenumbruch. Ich habe versucht, NestedListView & ExpandableHeightListView, aber nicht richtig funktioniert.

Jeder Vorschlag wäre dankbar.

enter codXML:: 
<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.SwipeRefreshLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/swipeContainer" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<ScrollView 
    android:id="@+id/scrollView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:clipToPadding="false" 
    android:fillViewport="true" 
    android:paddingBottom="75dp"> 

    <RelativeLayout 
     android:id="@+id/root_rl" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:descendantFocusability="beforeDescendants" 
     android:focusable="true" 
     android:focusableInTouchMode="true"> 

     <TextView 
      android:id="@+id/all_tpcs_heading" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:background="@color/bg_horizantal_magzine_listview" 
      android:padding="@dimen/ten_dp" 
      android:text="all topics" 
      android:textAllCaps="true" 
      android:textSize="14sp" /> 

     <com.healthyliving.live.utils.ExpandableHeightGridView 
      android:id="@+id/topicsGrid" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/all_tpcs_heading" 
      android:layout_marginTop="@dimen/six_dp" 
      android:clipChildren="true" 
      android:gravity="center" 
      android:horizontalSpacing="@dimen/six_dp" 
      android:isScrollContainer="false" 
      android:numColumns="2" 
      android:stretchMode="none" 
      android:verticalSpacing="@dimen/six_dp" /> 

     <TextView 
      android:id="@+id/rcnt_artcls_heading" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/topicsGrid" 
      android:layout_marginTop="@dimen/six_dp" 
      android:paddingBottom="@dimen/ten_dp" 
      android:paddingLeft="@dimen/ten_dp" 
      android:paddingRight="@dimen/ten_dp" 
      android:paddingTop="@dimen/sixteen_dp" 
      android:text="Recent articles" 
      android:textAllCaps="true" 
      android:textSize="14sp" /> 

     <ListView 
      android:id="@+id/recent_articles_listview" 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      android:layout_below="@+id/rcnt_artcls_heading" 
      android:dividerHeight="@dimen/list_view_divider" /> 

     <ProgressBar 
      android:layout_centerHorizontal="true" 
      android:layout_alignParentBottom="true" 
      android:id="@+id/load_progreebar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:indeterminateDrawable="@drawable/my_progress_indeterminate" 
      android:visibility="gone" /> 
    </RelativeLayout> 
</ScrollView> 

Fragment ::

recentArticleAdapter = new ExploreRecentArtilcesAdapter(getActivity(),  featuredArticles); 
    mRecentArticles.setAdapter(recentArticleAdapter); 
+0

Die ListView- und Gridview-Optimierung funktioniert nicht, wenn sie in einem Bildlauf verschachtelt ist. Alle Ansichten darin werden sofort gezeichnet. Daher sollten Sie wahrscheinlich eine einzelne Gridview mit einer oder mehreren Spalten basierend auf Ihrer Anforderung verwenden. –

+0

Funktioniert die Paginierung korrekt? Wenn ich nicht falsch liege, benötigst du eine erweiterbare Listen- und Gitteransicht in der Scroll-Ansicht. Bitte korrigieren Sie mich, wenn ich falsch liege. –

Antwort

0

Verwenden unten benutzerdefinierte Liste und Grid-Ansicht statt Standard ListView und GridView in Ihrem Layout XML-Datei.

Individuelle Listview: -

public class CustomListView extends ListView { 

    public CustomListView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomListView(Context context) { 
     super(context); 
    } 

    public CustomListView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, 
       MeasureSpec.AT_MOST); 
     super.onMeasure(widthMeasureSpec, expandSpec); 
    } 
} 

Individueller Gridview: -

public class CustomGridView extends GridView { 

    public CustomGridView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public CustomGridView(Context context) { 
     super(context); 
    } 

    public CustomGridView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, 
       MeasureSpec.AT_MOST); 
     super.onMeasure(widthMeasureSpec, expandSpec); 
    } 
} 

Bei diesem Ansatz, wenn Sie irgendwelche Schwierigkeiten bei der vertikalen Scroll- und horizontal Swipe finden (Wie Sie Ansicht Pager) verwenden unten benutzerdefinierte ScrollView Klasse anstelle der Standard-Bildlaufansicht in Ihrer Layout-XML-Datei.

public class VerticalScrollView extends ScrollView { 

    private float xDistance, yDistance, lastX, lastY; 
    public VerticalScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     switch (ev.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       xDistance = yDistance = 0f; 
       lastX = ev.getX(); 
       lastY = ev.getY(); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       final float curX = ev.getX(); 
       final float curY = ev.getY(); 
       xDistance += Math.abs(curX - lastX); 
       yDistance += Math.abs(curY - lastY); 
       lastX = curX; 
       lastY = curY; 
       if(xDistance > yDistance) 
        return false; 
     } 

     return super.onInterceptTouchEvent(ev); 
    } 
} 

alle diese benutzerdefinierte Ansicht Klassen in derselben Art und Weise verwenden Sie com.healthyliving.live.utils.ExpandableHeightGridView benutzerdefinierte Ansicht in der aktuellen Implementierung verwendet. Hoffe, diese Antwort wird dir helfen.

+0

Ich habe versucht, alle diese benutzerdefinierten Klassen zu verwenden .. seine Scrolling voll, aber in hängenden nicht reibungslosen Art und Weise –

+0

Wenn diese Antwort hilft dann pls akzeptieren/up vote it. –