适合tablayout多个选择按钮时使用 只用创建一个fragment
我尽量把步骤写详细些 应该不难理解
依赖
//TabLayout组件
implementation 'com.android.support:design:28+'
布局
<android.support.design.widget.TabLayout
android:id="@+id/mTab"
android:layout_width="match_parent"
android:layout_height="wrap_content"></android.support.design.widget.TabLayout>
<android.support.v4.view.ViewPager
android:id="@+id/mViewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"></android.support.v4.view.ViewPager>
建一个实体类
//用来存放tablayout的名字和url(一般每切换一个都要换页面内容 所以每创建一个就分配一个url用来网络请求 也可以传其他值 )
package com.example.lin.myservice.reuse;
public class ReuseEntity {
private String name;
private String type;
public ReuseEntity(String name, String type) {
this.name = name;
this.type = type;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
在Activity里创建两个Arraylist集合
//用来存放fragment
private ArrayList<Fragment> mFragment = new ArrayList<>();
//用来存放tablayout的名字和url(一般每切换一个都要换页面内容 所以每创建一个就分配一个url用来网络请求 也可以传其他值 )
private ArrayList<ReuseEntity> mTitle = new ArrayList<>();
把需要传入的tablayout的名字和url存入mTitle集合中
如果是网络获取的值可以for循环添加 结果一样(这里只存三个值举个例子:实在是懒得找网址了,就随便拉了几个句子传过去显示吧)
mTitle.add(new ReuseEntity("奥特曼", "奥特曼的职责是消灭小怪兽"));
mTitle.add(new ReuseEntity("小怪兽", "我们都是小怪兽,早晚会被正义的奥特曼杀死"));
mTitle.add(new ReuseEntity("路明非", "不要死"));
然后新建一个fragment
- 创建时 Include fragment factory methods?和Include interface callbacks? 这两个要选中的
- onCreateView方法后边的全删掉不用 前边报错的也删掉 暂时用不上
好了 先放一边 回到Activity for循环把url传入fragment 一般可以传两个String值的 这边因为只用了一个 后边就只传了一个空
for (int i = 0; i < mTitle.size(); i++) {
mFragment.add(BlankFragment.newInstance(mTitle.get(i).getType(),""));
}
都储存完了 接下来写适配器
package com.example.lin.myservice.reuse;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import java.util.ArrayList;
public class ReuseAdapter extends FragmentPagerAdapter {
private ArrayList<ReuseEntity> mTitle;
private ArrayList<Fragment> mFragment;
public ReuseAdapter(FragmentManager fm, ArrayList<ReuseEntity> mTitle, ArrayList<Fragment> mFragment) {
super(fm);
this.mTitle = mTitle;
this.mFragment = mFragment;
}
@Override
public Fragment getItem(int i) {
return mFragment.get(i);
}
@Override
public int getCount() {
return mFragment.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return mTitle.get(position).getName();
}
}
然后调用适配器 绑定viewpager
ReuseAdapter adapter = new ReuseAdapter(getSupportFragmentManager(), mTitle, mFragment);
mViewPager.setAdapter(adapter);
//设置可以滑动
mTab.setTabMode(TabLayout.MODE_SCROLLABLE);
mTab.setupWithViewPager(mViewPager);
再回到fragment处理发送过来的数据 给布局加个id一会用来显示传过来的值
<TextView
android:id="@+id/mName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
传过来的值就保存在mParam1和mParam2中 因为只传了一个 所以就把mParam1的值赋给TextView
mName.setText(mParam1);
由于网络不好就不发完成图了 收工收工 溜了溜了