Android : 频道管理

需要再项目的build.gradle里面写上maven {url “https://jitpack.io”},否则依赖类会报错. 效果图在最后.

allprojects {
    repositories {
        google()
        jcenter()
        maven {url "https://jitpack.io"}
    }
}

第三方框架需要的依赖

implementation 'com.github.andyoom:draggrid:v1.0.1'

其他jar包

    implementation 'com.android.support:design:28.0.0'
    implementation 'com.google.code.gson:gson:2.8.5'

需要的权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
<!--此处写好上面那一行权限直接alt+enter就可以出来-->
    tools:ignore="ProtectedPermissions" />
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 震动权限 -->
<uses-permission android:name="android.permission.VIBRATE"/>

主页面上的xml的代码

<?xml version="1.0" encoding="utf-8"?>
<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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.TabLayout
            android:id="@+id/tl"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:tabMode="scrollable" />

        <TextView
            android:id="@+id/Add_Fragment"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_centerInParent="true"
            android:text="+"
            android:textSize="40dp" />

    </RelativeLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/View_Page"
        android:layout_width="match_parent"
        android:layout_height="match_parent"></android.support.v4.view.ViewPager>


    <ImageButton
        android:id="@+id/imgbtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_marginTop="92dp"
        android:layout_marginRight="250dp"
        android:src="@mipmap/ic_launcher" />


</LinearLayout>

Activity里的主代码

package com.bwie.administrator.channel;

import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.design.widget.TabLayout;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import com.andy.library.ChannelActivity;
import com.andy.library.ChannelBean;
import com.bwie.administrator.channel.frament.aaaFragment;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

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

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TabLayout tl;
    private TextView imgbtn;
    private String jsonStr;
    private ArrayList<ChannelBean> channelBeens;
    private ViewPager View_Page;
    private ArrayList<Fragment> datas = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

        initData();

    }

    private void initView() {
        tl = findViewById(R.id.tl);
        imgbtn = (TextView) findViewById(R.id.Add_Fragment);
        View_Page = (ViewPager) findViewById(R.id.View_Page);
        imgbtn.setOnClickListener(this);
    }

    private void initData() {
        //准备栏目数据
        channelBeens = new ArrayList<ChannelBean>();
        channelBeens.add(new ChannelBean("热点", true));
        channelBeens.add(new ChannelBean("军事", true));
        channelBeens.add(new ChannelBean("八卦", false));
        channelBeens.add(new ChannelBean("666", false));
        datas.add(new aaaFragment());
        datas.add(new bbbFragment());
        datas.add(new cccFragment());
        datas.add(new aaaFragment());

        //把选择的栏目(true)数据配置给tablayout
        for (int i = 0; i < channelBeens.size(); i++) {
            //进行判断
            if (channelBeens.get(i).isSelect()) {
                tl.addTab(tl.newTab().setText(channelBeens.get(i).getName()));
            }
        }
        View_Page.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
            @Override
            public Fragment getItem(int i) {
            //此处加入if判断,进行和fragment绑定,多少个条目就绑定多少次
            if (channelBeens.get(i).getName().equals("热点")){
                    return datas.get(0);
                }else if (channelBeens.get(i).getName().equals("军事")){
                    return datas.get(1);
                }else if (channelBeens.get(i).getName().equals("八卦")){
                    return datas.get(2);
                }else {
                    return datas.get(3);
                }
         }

            @Override
            public int getCount() {
                int count = 0;
                //循环
                for (int i = 0; i < channelBeens.size(); i++) {
                    //进行判断
                    if (channelBeens.get(i).isSelect()) {
                        count++;
                    }
                }

                return count;
            }

            @Nullable
            @Override
            public CharSequence getPageTitle(int position) {
                return channelBeens.get(position).getName();
            }
        });
        tl.setupWithViewPager(View_Page);


    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.Add_Fragment:
                ChannelActivity.startChannelActivity(MainActivity.this, channelBeens);
                break;
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        //为true表示是频道管理回调回来的
        if (requestCode == ChannelActivity.REQUEST_CODE && resultCode == ChannelActivity.RESULT_CODE) {
            //得到栏目管理的结果
            jsonStr = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);
            //吐司查看
            Toast.makeText(this, jsonStr, Toast.LENGTH_SHORT).show();
            //打印查看
            Log.i("main", jsonStr);
            //清空之前的项目
            tl.removeAllTabs();
            //把新选择的栏目结果更新到tablayout上
            Gson gson = new Gson();
            //进行json解析
            Type type = new TypeToken<ArrayList<ChannelBean>>() {
            }.getType();
            channelBeens = gson.fromJson(jsonStr, type);
            //遍历结果,更新TabLayout
            for (int i = 0; i < channelBeens.size(); i++) {
            //进行判断
                if (channelBeens.get(i).isSelect()) {
                    try {
                    	//此处是第三方框架的一个小坑,会报IllegalStateException非法语句异常所以直接try了,然后就可以解决异常
                        tl.addTab(tl.newTab().setText(channelBeens.get(i).getName()));
                    }catch (Exception e){
                    }
            }
            View_Page.getAdapter().notifyDataSetChanged();
        }
    }
}

Fragment是空的 只是为了验证与fragment的联动,就不上代码了,另外有些小坑都已经填了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
效果图就这么多吧,第三方挺全 的,就是会出现小坑,需注意

以上;

猜你喜欢

转载自blog.csdn.net/weixin_43603192/article/details/84309513