0

所以我希望tablayout和viewpager能夠通過不同的片段進行滑動。TabLayout和Viewpager - 用圖像替換文字

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_home, container, false); 


    tabLayout = (TabLayout) view.findViewById(R.id.tabLayout); 
    viewPager = (ViewPager) view.findViewById(R.id.viewPager); 

    viewPagerAdapter = new ViewPagerAdapter(getFragmentManager()); 
    viewPagerAdapter.addFragments(new AFragment(), "Test1", getContext()); 
    viewPagerAdapter.addFragments(new BFragment(), "Test2", getContext()); 
    viewPagerAdapter.addFragments(new CFragment(), "Test3", getContext()); 

    viewPager.setAdapter(viewPagerAdapter); 
    tabLayout.setupWithViewPager(viewPager); 

    return view; 
} 

而且我ViewPagerAdapter類看起來是這樣的:

public class ViewPagerAdapter extends FragmentPagerAdapter { 

ArrayList<Fragment> fragments = new ArrayList<>(); 
ArrayList<String> tabTitles = new ArrayList<>(); 
Context context; 

public void addFragments(Fragment fragments, String titles, Context context) { 
    this.fragments.add(fragments); 
    this.tabTitles.add(titles); 
    this.context = context; 
} 

public ViewPagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

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

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

@Override 
public CharSequence getPageTitle(int position) { 
      return tabTitles.get(position); 
} 
} 

所以適配器設置我viewPager來包含所有如標題爲我tabLayout和片段的量的信息。那是對的嗎?

所以我現在要做的是用某些圖標替換我的tabLayout上的標題。 我應該刪除我的ViewPagerAdapter構造函數中的String參數並刪除我的Arraylist,還是必須傳遞一個空字符串?

我需要添加哪些代碼才能將ViewPageAdapter類添加到ViewPageAdapter類中,以便能夠將圖標而不是字符串添加到佈局中? 我發現了一個可能的解決方案在這裏:How to add page title and icon in android FragmentPagerAdapter

所以我改變了我的方法到:

@Override 
public CharSequence getPageTitle(int position) { 

    myDrawable = ContextCompat.getDrawable(context, R.drawable.ic_mail_outline_black_24dp); 
    SpannableStringBuilder sb = new SpannableStringBuilder(" Page #"+ position); // space added before text for convenience 

    myDrawable.setBounds(0, 0, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight()); 
    ImageSpan span = new ImageSpan(myDrawable, ImageSpan.ALIGN_BASELINE); 
    sb.setSpan(span, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

    return sb; 
} 

,改變了我的標題頁#0#1 ......但沒有圖標添加到我的TabLayout。 謝謝!

編輯:

這工作了。還是不知道我做了什麼,雖然錯了

tabLayout.getTabAt(i).setIcon(); 

回答

0

請替換此代碼將工作

@覆蓋 公共CharSequence的getPageTitle(INT位置){

myDrawable = ContextCompat.getDrawable(context, R.drawable.ic_mail_outline_black_24dp); 
    title = tabTitles.get(position); 
    SpannableStringBuilder sb = new SpannableStringBuilder(" " + title); // space added before text for convenience 
    try { 
     myDrawable.setBounds(5, 5, myDrawable.getIntrinsicWidth(), myDrawable.getIntrinsicHeight()); 
     ImageSpan span = new ImageSpan(myDrawable, DynamicDrawableSpan.ALIGN_BASELINE); 
     sb.setSpan(span, 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } catch (Exception e) { 
     // TODO: handle exception 
    } 

tabTitles.set(位置,SB); return tabTitles.get(position);

} 
+0

仍然有待觀察沒有圖標。這可能是一個尺寸問題嗎? –

+0

請檢查編輯的答案 – Ratnesh

+0

您的方法似乎沒有任何影響。我把它改成(「123」+ title)來檢查。並沒有使用新名稱'123'+標題。我的方法至少對標題有影響。 –

1

請使用此代碼爲圖標

 mTabLayout.setupWithViewPager(mViewPager); 
     for (int i = 0; i < mTabLayout.getTabCount(); i++) { 
mTabLayout.getTabAt(i).setIcon(R.drawable.your_icon); 
    }