效果图
1.布局页面
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/imagebtn"
app:layout_constraintTop_toTopOf="parent"
app:tabMode="scrollable"
/>
<ImageButton
android:id="@+id/imagebtn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toTopOf="@id/tab_layout"
app:layout_constraintRight_toRightOf="parent"
android:src="@drawable/ic_action_name"
app:layout_constraintBottom_toBottomOf="@id/tab_layout"
/>
<android.support.v4.view.ViewPager
android:id="@+id/v_pager"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/imagebtn"
/>
</android.support.constraint.ConstraintLayout>
2.MainActivity页面
package com.example.pindaoguanli_demo;
import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import com.andy.library.ChannelActivity;
import com.andy.library.ChannelBean;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private TabLayout tabLayout;
private ImageButton imageButton;
private ViewPager viewPager;
private List<ChannelBean> list;
private List<ChannelBean> channelBeans;
private Type type;
private Gson gson;
private String jsonStr;
private TabAdaper tabAdaper;
private List<ChannelBean> date = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取资源id
tabLayout = findViewById(R.id.tab_layout);
imageButton = findViewById(R.id.imagebtn);
viewPager = findViewById(R.id.v_pager);
//创建适配器
tabAdaper = new TabAdaper(getSupportFragmentManager());
viewPager.setAdapter(tabAdaper);
tabLayout.setupWithViewPager(viewPager);
initData();
}
private void initData() {
//实例化
list = new ArrayList<>();
list.add(new ChannelBean("关注",true));
list.add(new ChannelBean("推荐",true));
list.add(new ChannelBean("科技",true));
list.add(new ChannelBean("美食",true));
list.add(new ChannelBean("养生",true));
list.add(new ChannelBean("电影",true));
list.add(new ChannelBean("生活",true));
list.add(new ChannelBean("搞笑",true));
list.add(new ChannelBean("懂车帝",true));
list.add(new ChannelBean("军事",true));
list.add(new ChannelBean("党媒推荐",true));
list.add(new ChannelBean("历史",true));
list.add(new ChannelBean("体育",true));
list.add(new ChannelBean("宠物",false));
list.add(new ChannelBean("娱乐",false));
list.add(new ChannelBean("财经",false));
list.add(new ChannelBean("直播",false));
list.add(new ChannelBean("特卖",false));
list.add(new ChannelBean("房产",false));
list.add(new ChannelBean("精品课",false));
list.add(new ChannelBean("小说",false));
list.add(new ChannelBean("时尚",false));
list.add(new ChannelBean("音频",false));
list.add(new ChannelBean("育儿",false));
list.add(new ChannelBean("数码",false));
list.add(new ChannelBean("健康",false));
//把选中的栏目为true的数据设置给TabLayout
for (int i = 0; i <list.size() ; i++) {
if(list.get(i).isSelect()){
//tabLayout.addTab(tabLayout.newTab().setText(list.get(i).getName()));
date.add(list.get(i));
}
}
tabAdaper.setList(date);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ChannelActivity.startChannelActivity(MainActivity.this,list);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == ChannelActivity.REQUEST_CODE && resultCode == ChannelActivity.RESULT_CODE){
//得到栏目管理的结果
jsonStr = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);
Log.i("TEXT",jsonStr);
//清空之前的栏目
tabLayout.removeAllTabs();
//把新选择的栏目更新的tablayout上
gson = new Gson();
//进行解析
type = new TypeToken<List<ChannelBean>>() {}.getType();
channelBeans = gson.fromJson(jsonStr, type);
date.removeAll(date);
//遍历结果更新tablayout
for (int i = 0;i<channelBeans.size();i++){
if(channelBeans.get(i).isSelect()){
//tabLayout.addTab(tabLayout.newTab().setText(channelBeans.get(i).getName()));
date.add(channelBeans.get(i));
}
}
ChannelDao.getIntance(this).delAll();
ChannelDao.getIntance(this).addAll(date);
tabAdaper.setList(ChannelDao.getIntance(this).select());
}
}
}
3.适配器页面
package com.example.pindaoguanli_demo;
import android.content.Context;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import com.andy.library.ChannelBean;
import java.util.ArrayList;
import java.util.List;
public class TabAdaper extends FragmentPagerAdapter {
private List<ChannelBean> list;
public TabAdaper(FragmentManager fm) {
super(fm);
list = new ArrayList<>();
}
public void setList(List<ChannelBean> list) {
this.list = list;
notifyDataSetChanged();
}
@Override
public Fragment getItem(int i) {
switch (i){
default: return new ShowFragment();
}
//return null;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return list.get(position).getName();
}
@Override
public int getCount() {
return list.size();
}
}
4.fragment页面
package com.example.pindaoguanli_demo;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class ShowFragment extends Fragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
TextView textView = new TextView(getActivity());
textView.setText("页面");
return textView;
}
}
5.导入的依赖
5.1在整个工程的build.gradle需要导入的依赖
maven {url "https://jitpack.io"}
5.2在相应的module中的build.gradle需要导入的依赖
implementation 'com.github.andyoom:draggrid:v1.0.1'
6.在清单文件中加的权限
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>