频道管理

本文介绍了一个基于安卓的项目中如何使用TabLayout和ViewPager进行整合,实现动态添加Tab和Fragment的功能。通过实例展示了如何在点击按钮后跳转到频道管理页面,更新频道数据,并将数据变化反映在TabLayout上。

allprojects {
repositories {
google()
jcenter()
maven {url “https://jitpack.io”}
}
}
添加依赖
compile ‘com.github.andyoom:draggrid:v1.0.1’

package com.exam.liulei2018_11_19.frag;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import com.andy.library.ChannelActivity;
import com.andy.library.ChannelBean;
import com.exam.liulei2018_11_19.R;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import java.lang.reflect.Type;
import java.util.ArrayList;

public class Frag_01 extends Fragment {
    ArrayList<ChannelBean> channelBeanList =  new ArrayList<ChannelBean>();
    private TabLayout tabLayout;
    private ViewPager pager;
    ArrayList<Fragment> fraglist = new ArrayList<>();
    private MypagerAdapter mypagerAdapter;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view =  inflater.inflate(R.layout.frag_01,container,false);
        //初始化组件
        tabLayout = view.findViewById(R.id.ftablayout);
        pager = view.findViewById(R.id.fviewpager);

        Button button = view.findViewById(R.id.mbut);
        //点击进入频道管理
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //传值
                ChannelActivity.startChannelActivity((AppCompatActivity) getActivity(),channelBeanList);
            }
        });
        //添加数据
        channelBeanList.add(new ChannelBean("热点",true));
        channelBeanList.add(new ChannelBean("北京",true));
        channelBeanList.add(new ChannelBean("房价",true));
        channelBeanList.add(new ChannelBean("旅游",false));
        channelBeanList.add(new ChannelBean("条目1",false));
        channelBeanList.add(new ChannelBean("条目2",false));
        //添加fragment
        for (int i = 0; i < channelBeanList.size(); i++) {
            if (channelBeanList.get(i).isSelect()) {
                String tabName = channelBeanList.get(i).getName();
                tabLayout.addTab(tabLayout.newTab().setText(tabName));
                if (i == 0) {
                    fraglist.add(new Frag_05());
                }else if(i == 2){
                    fraglist.add(new Frag_06());
                }else {
                    fraglist.add(new Frag_02());
                }
            }
        }
        //添加适配器
        mypagerAdapter = new MypagerAdapter(getActivity().getSupportFragmentManager());
        pager.setAdapter(mypagerAdapter);
        tabLayout.setTabMode(TabLayout.MODE_SCROLLABLE);
        tabLayout.setupWithViewPager(pager);
        return  view;
    }
    class MypagerAdapter extends  FragmentPagerAdapter{
        public MypagerAdapter(FragmentManager fm) {
            super(fm);
        }
        @Override
        public Fragment getItem(int i) {
            return fraglist.get(i);
        }
        @Override
        public int getCount() {
            return fraglist.size();
        }
        @Nullable
        @Override
        public CharSequence getPageTitle(int position) {
            return channelBeanList.get(position).getName();
        }
    }
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        String stringExtra = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);
        Type type = new TypeToken<ArrayList<ChannelBean>>() {}.getType();
        Gson gson = new Gson();
        channelBeanList = gson.fromJson(stringExtra, type);
        tabLayout.removeAllTabs();
        fraglist.clear();
        for (int i = 0; i < channelBeanList.size(); i++) {
            ChannelBean channelBean = channelBeanList.get(i);
            if (channelBean.isSelect()) {
                String tabName = channelBeanList.get(i).getName();
                tabLayout.addTab(tabLayout.newTab().setText(tabName));
                if ("热点".equals(channelBean.getName())) {
                    fraglist.add(new Frag_05());
                }else if("北京".equals(channelBean.getName())){
                    fraglist.add(new Frag_02());
                }else if("房价".equals(channelBean.getName())){
                    fraglist.add(new Frag_06());
                }else {
                    fraglist.add(new Frag_02());
                }
            }
            mypagerAdapter.notifyDataSetChanged();
        }
    }
}


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        FragmentManager manager = getSupportFragmentManager();
        Fragment frag_01 = manager.findFragmentByTag("frag_01");
        frag_01.onActivityResult(requestCode, resultCode, data);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值