Android 筆記 - Tablayout & ViewPager2 or ViewPager

 點擊 TabLayout 的 TabItem,自動切換 ViewPager2 或 ViewPager 的頁面


ViewPager2 的搭配使用方法

用法如下 (另附上 ViewPager2用法連結)

TabLayout tl = findViewById(R.id.你的TabLayout物件ID);
ViewPager2 vp = findViewById(R.id.你的ViewPager2物件ID);
vp_top.setAdapter(new ViewPager2Adapter(this));
new TabLayoutMediator(tl, vp,
(tab, position) -> tab.setText("Title " + (position + 1))
).attach();


ViewPager 的搭配使用方法

用法如下(感覺很簡單,但我沒試過這個XD。但...有新的還用舊的物件??)

TabLayout tl = findViewById(R.id.你的TabLayout物件ID);
ViewPager vp = findViewById(R.id.你的ViewPager2物件ID);
tl_top.setupWithViewPager(vp);


我的用法 - MyTabLayout.java


public class MyTabLayout {
static int[] stringID, iconID, layoutID;
public int size;
public TabLayout tl;
public ViewPager2 vp;

MyTabLayout(Activity activity, Context context, FragmentActivity fa, int tabLayoutID, int viewPagerID, int[] _stringID, int[] _iconID, int[] _layoutID) {
stringID = _stringID;
iconID = _iconID;
layoutID = _layoutID;
if(stringID != null)
size = stringID.length;
if(iconID != null)
size = iconID.length;

tl = activity.findViewById(tabLayoutID);
vp = activity.findViewById(viewPagerID);
vp.setAdapter(new ViewPager2Adapter(fa));
new TabLayoutMediator(tl, vp, (tab, position) -> {
if(stringID != null && stringID[position] != 0)
tab.setText(context.getString(stringID[position]));
if(iconID != null && iconID[position] != 0)
tab.setIcon(iconID[position]);

// 也可以用自訂的 View,並在這改內容
// View v = LayoutInflater.from(context).inflate(R.layout.你的layoutXML, tab.view, false);
// ImageView iv = v.findViewById(R.id.iv);
// iv.setImageResource(iconID[position]);
// TextView tv = v.findViewById(R.id.tv);
// tv.setText(context.getString(stringID[position]));
// tab.setCustomView(v);
}).attach();
}

public static class ViewPager2Fragment extends Fragment {
int pos;
public ViewPager2Fragment(int position) {
pos = position;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(layoutID[pos], container, false);
}
}
private class ViewPager2Adapter extends FragmentStateAdapter {
public ViewPager2Adapter(FragmentActivity fa) {
super(fa);
}
@Override
public Fragment createFragment(int position) {
return new ViewPager2Fragment(position);
}
@Override
public int getItemCount() {
return size;
}
}
}




沒有留言:

張貼留言