在本项目的Gradle文件中注册:maven {url “https://jitpack.io”}
allprojects {
repositories {
jcenter()
maven {url "https://jitpack.io"}
}
}
在本项目的Gradle文件中导入依赖:design(tabLayout).频道管理.Gson
implementation 'com.android.support:design:27.1.1'
implementation 'com.github.andyoom:draggrid:v1.0.1'
implementation 'org.kie.modules:com-google-code-gson:6.5.0.Final'
MainActivity布局:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<android.support.design.widget.TabLayout
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:id="@+id/tabLayout"
app:tabSelectedTextColor="#ff00"
app:tabGravity="fill">
</android.support.design.widget.TabLayout>
<Button
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"
android:background="#666"
android:id="@+id/button"/>
</LinearLayout>
<android.support.v4.view.ViewPager
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/pager">
</android.support.v4.view.ViewPager>
</LinearLayout>
全局定义变量:fragment集合.全局UI组件.频道(标题)集合.适配器
频道管理给我们提供了ChannelBean这个封装类,这个封装类中有两个属性
1.name(String) 频道名称
2.isSelect(boolean) 是否选中频道
private ViewPager pager;
private TabLayout tabLayout;
private Button button;
List<Fragment> fraglist= new ArrayList<Fragment>();
ArrayList<ChannelBean> titlelist = new ArrayList<ChannelBean>();
private MyFragmentPagerAdapter myFragmentPagerAdapter;
MainActivity–onCreate方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//加载组件
pager = findViewById(R.id.pager);
tabLayout = findViewById(R.id.tabLayout);
button = findViewById(R.id.button);
//tablayout绑定pager
tabLayout.setupWithViewPager(pager);
//适配器
myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
pager.setAdapter(myFragmentPagerAdapter);
//创建标题and fragment集合
initData();
//点击+监听
getClickListener();
}
适配器:
class MyFragmentPagerAdapter extends FragmentPagerAdapter{
public MyFragmentPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return fraglist.get(position);
}
@Override
public int getCount() {
return fraglist.size();
}
@Nullable
@Override
//返回频道给tab
public CharSequence getPageTitle(int position) {
return titlelist.get(position).getName();
}
}
初始化数据initData():
private void initData() {
//创建频道(标题)
titlelist.add(new ChannelBean("热点",true));
titlelist.add(new ChannelBean("军事",true));
titlelist.add(new ChannelBean("八卦",true));
titlelist.add(new ChannelBean("游戏",true));
titlelist.add(new ChannelBean("宠物",false));
titlelist.add(new ChannelBean("汽车",false));
titlelist.add(new ChannelBean("热卖",false));
titlelist.add(new ChannelBean("外卖",false));
//将选择的标签添加到tagLayout
for (int i = 0; i <titlelist.size() ; i++) {
//判断此频道是否被选中
if(titlelist.get(i).isSelect()){
//新建tab 将集合中的名称赋值给tab
tabLayout.addTab(tabLayout.newTab().setText(titlelist.get(i).getName()));
//创建fragment,BaseFragment是我自己创建,继承了Fragment
fraglist.add(new BaseFragment());
}
}
//刷新适配器
myFragmentPagerAdapter.notifyDataSetChanged();
}
getClickListener()方法:
频道管理还给我们提供了ChannelActivity(频道管理的Activity)
private void getClickListener() {
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//启动管理,跳转(进入频道管理),将频道集合传过去
ChannelActivity.startChannelActivity(MainActivity.this,titlelist);
}
});
重写onActivityResult方法接收回传值
最后进入频道管理操作频道,返回MainActivity接收回传值(选择的新频道)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//判断是否是频道管理的回传值
if(requestCode==ChannelActivity.REQUEST_CODE&&resultCode==ChannelActivity.RESULT_CODE){
//得到回传值,键为RESULT_JSON_KEY
String stringExtra = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);
//先清空之前tablayout上的频道
tabLayout.removeAllTabs();
//清空fragment
fraglist.clear();
//解析
Gson gson = new Gson();
//得到List<ChannelActivity>类型type
Type type = new TypeToken<ArrayList<ChannelBean>>() {}.getType();
//解析成List<ChannelActivity>类型
titlelist = gson.fromJson(stringExtra,type);
//循环遍历,添加到taglayout(新频道),和fragment
for (int i = 0; i <titlelist.size(); i++) {
//判断是否是选中的频道
if(titlelist.get(i).isSelect()){
tabLayout.addTab(tabLayout.newTab().setText(titlelist.get(i).getName()));
fraglist.add(new BaseFragment());
}
}
//刷新适配器
myFragmentPagerAdapter.notifyDataSetChanged();
}
}
效果图: