2016-07-04 3 views
1

나는 scrollview에서 격자보기와 목록보기 (페이지 매김 포함)가 있습니다.Viewpager 프래그먼트에서 전체 화면을 스크롤 할 수있게 만드는 방법

결과적으로 개별 스크롤이 발생하지만 페이지별로 스크롤 할 수있는 전체 화면이 필요합니다. 나는 NestedListView & ExpandableHeightListView를 사용하려고했지만 제대로 작동하지 않습니다.

모든 제안은 감사 할 것입니다.

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> 

조각 : 주어진 사용자 지정 목록 대신 레이아웃 XML 파일의 기본 ListViewGridView의 격자보기 아래

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

스크롤 내에 중첩되어 있으면 ListView 및 Gridview 최적화가 작동하지 않습니다. 그 안에있는 모든 견해가 즉시 그려집니다. 아마 당신은 당신의 요구 사항에 따라 하나 이상의 열이있는 단일 Gridview를 사용하는 것을 고려해야합니다. –

+0

페이지 매김이 올바르게 작동합니까? 잘못된 것이 아니라면 스크롤 뷰 내부에서 확장 가능한 높이 목록 뷰와 격자보기가 필요합니다. 내가 틀렸다면 친절하게 정정하십시오. –

답변

0

사용.

사용자 정의 목록보기 : -

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

사용자의 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); 
    } 
} 

, 당신이 (당신이보기 호출기를 가지고) 아래 사용 수직 스크롤과 수평 슬쩍에 어려움을 찾을 경우 사용자 정의 ScrollView 레이아웃 xml 파일의 기본 스크롤보기 대신 클래스.

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

는 현재 구현 com.healthyliving.live.utils.ExpandableHeightGridView 사용자 정의보기를 사용하는 같은 방법으로 모든 사용자 정의 뷰 클래스를 사용합니다. 이 답변이 도움이되기를 바랍니다.

+0

나는이 모든 커스텀 클래스들을 사용하려고 시도했다. 그러나 그것의 스크롤링은 완만하지만 매끄러운 방식이 아니었다. –

+0

이 대답이 도움이된다면 pls는 그것을 받아 들인다. –

관련 문제