频道管理+TabLayout+ViewPager联动

效果图
在这里插入图片描述
在这里插入图片描述
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"/>

猜你喜欢

转载自blog.csdn.net/guoxinyu1207/article/details/84325781