2017-03-14 109 views
0

我已經在這裏搜索,但沒有找到我的解決方案。所以我發佈我的問題,當我們點擊標籤時它的工作很好,但是當我們滾動viewPager時,它不能很好地工作。有一些動態高度的問題。有些內容沒有顯示。帶動態高度片段的標籤

我的XML是

<my_packagename.ViewPager_Height 
      android:id="@+id/pager" 
      android:layout_width="match_parent" 
      android:nestedScrollingEnabled="false" 
      android:layout_height="wrap_content" /> 

,現在我的java文件就像

public class ViewPager_Height extends ViewPager { 

private View mCurrentView; 

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

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

@Override 
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    if (mCurrentView == null) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     return; 
    } 
    int height = 0; 
    mCurrentView.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED)); 
    int h = mCurrentView.getMeasuredHeight(); 
    if (h > height) height = h; 
    heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); 

    super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
} 

public void measureCurrentView(View currentView) { 
    mCurrentView = currentView; 
    requestLayout(); 
} 

public int measureFragment(View view) { 
    if (view == null) 
     return 0; 

    view.measure(0, 0); 
    return view.getMeasuredHeight(); 
} 

}

和主類是

final ViewPager_Height viewPager = (ViewPager_Height) findViewById(R.id.pager); 
     TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); 

     tabLayout.addTab(tabLayout.newTab().setText(about_us)); 
     tabLayout.addTab(tabLayout.newTab().setText(listing)); 
     tabLayout.addTab(tabLayout.newTab().setText(contact)); 

     DynamicheightTabsAdapter adapter; 
     adapter = new DynamicheightTabsAdapter(getSupportFragmentManager(), "TASK"); 
     viewPager.setAdapter(adapter); 
     viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); 

     tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
       viewPager.setCurrentItem(tab.getPosition()); 
      } 

      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 

      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 

      } 
     }); 


    } 
} 

,最後我的適配器類像

public class DynamicheightTabsAdapter extends FragmentPagerAdapter { 

private List<Fragment> fragments; 
private int mCurrentPosition = -1; 

public DynamicheightTabsAdapter(FragmentManager fm, String takidetifier) { 
    super(fm); 
    this.fragments = new ArrayList<>(); 

    switch (takidetifier){ 
     case "Task": 
      fragments.add(new MyFirstFragment()); 
      fragments.add(new MySecondFragment()); 
      fragments.add(new MyThirdFragment()); 
      break; 


    } 



} 

@Override 
public void setPrimaryItem(ViewGroup container, int position, Object object) { 
    super.setPrimaryItem(container, position, object); 
    if (position != mCurrentPosition) { 
     Fragment fragment = (Fragment) object; 
     ViewPager_Height pager = (ViewPager_Height) container; 
     if (fragment != null && fragment.getView() != null) { 
      mCurrentPosition = position; 
      pager.measureCurrentView(fragment.getView()); 
     } 
    } 
} 

@Override 
public Fragment getItem(int position) { 
    return fragments.get(position); 
} 

@Override 
public int getCount() { 
    return fragments.size(); 
} 

}

+0

使用 '機器人:weightSum' 的線性佈局和「機器人: layout_weight'線性佈局中的其他元素。例如:您需要將weightSum設置爲100,並且所有子元素的layout_weight的總和應該爲100。 –

回答

0

呼叫adapter.notifyDataSetChanged()在OnTabSelected 因此,新的代碼將是,

public void onTabSelected(TabLayout.Tab tab) { viewPager.setCurrentItem(tab.getPosition()); adapter.notifyDataSetChanged() }