Android 中   使用 draggrid 实现仿今日头条频道管理(详细步骤)

前言

最近开发的项目中有类似今日头条新闻的频道管理,用的是第三方的draggrid  所以试着尝试做了一下。代码如下

集成

1:导入依赖到自己工程下的gradle

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

(注,编译会爆错,尝试着添加下面的步骤)

2.在项目的build.gradle中添加
allprojects {
    repositories {
        jcenter()
//下面这句才是加上的,上面的自带 的
        maven {url "https://jitpack.io"}
    }
}

点击刷新,看是否编译出错

3.权限
    <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<!-- 震动权限 -->

<uses-permission android:name="android.permission.VIBRATE"/>

4 在tablayout布局的右侧添加按钮,可自定义

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    ><android.support.design.widget.TabLayout
        android:id="@+id/tl"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabIndicatorColor="@android:color/holo_red_dark"
        app:tabMode="scrollable"
        app:tabSelectedTextColor="@color/colorPrimary"
    app:tabTextColor="@color/colorPrimaryDark"
    app:tabMinWidth="100dp"
    /><ImageButton
        android:id="@+id/imgbtn"
        android:src="@mipmap/add_recipients_normal"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" /><android.support.v4.view.ViewPager
    android:id="@+id/vp"
    android:layout_below="@+id/tl"
    android:layout_width="match_parent"
     android:layout_height="match_parent"/></RelativeLayout>

5:在Activity下主要代码:


package com.bawei.newsapp;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.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.Switch;
import android.widget.Toast;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;/**
 * Created by admin on 2017/12/13.
 */

public class Fragment01 extends Fragment {private View view;private ViewPager mVp;
    private ArrayList<ChannelBean> channelBeens;
    private TabLayout mTl;private Gson gson;String jsonStr = "";
    private FragmentManager fm;private ArrayList<Fragment> fragments;private ImageButton mImgbtn;@Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = View.inflate(getContext(), R.layout.fragment01_layout, null);initView(view);fm = getChildFragmentManager();channelBeens = new ArrayList<ChannelBean>(); //创建集合//准备数据,添加集合   //准备栏目数据
        channelBeens.add(new ChannelBean("热点",true));channelBeens.add(new ChannelBean("军事",true));channelBeens.add(new ChannelBean("八卦",true));channelBeens.add(new ChannelBean("游戏",true));channelBeens.add(new ChannelBean("宠物",true));channelBeens.add(new ChannelBean("汽车",true));channelBeens.add(new ChannelBean("热卖",true));channelBeens.add(new ChannelBean("外卖",true));channelBeens.add(new ChannelBean("条目1",true));channelBeens.add(new ChannelBean("条目2",true));channelBeens.add(new ChannelBean("条目3",false));channelBeens.add(new ChannelBean("条目4",false));channelBeens.add(new ChannelBean("条目5",false));channelBeens.add(new ChannelBean("条目6",false));channelBeens.add(new ChannelBean("条目7",false));channelBeens.add(new ChannelBean("条目8",false));
   //把选择的栏目(true)数据配置给tablayout
        for (int i = 0; i < channelBeens.size(); i++) {  //循环选取if (channelBeens.get(i).isSelect()){ //判断是否选中,若选中则添加
                mTl.addTab(mTl.newTab().setText(channelBeens.get(i).getName()));}}fragments = new ArrayList<Fragment>();//循环发送数据到fragment
        for (int i = 0; i < channelBeens.size(); i++) {Fragment_test fragment_test = new Fragment_test();Bundle b = new Bundle();b.putString("title", channelBeens.get(i).getName());fragment_test.setArguments(b);fragments.add(fragment_test);
  }

     //给viewpager  添加适配器mVp.setAdapter(new FragmentPagerAdapter(fm) {@Override
            public Fragment getItem(int position) {return fragments.get(position);}@Override
            public int getCount() {return fragments.size();}@Nullable
            @Override
            public CharSequence getPageTitle(int position) {String name = channelBeens.get(position).getName();return name;
            }});mTl.setupWithViewPager(mVp);  //将tablayout 与viewpager  做绑定处理return view;}

//调用activity中 的回调方法

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if(requestCode == ChannelActivity.REQUEST_CODE && resultCode == ChannelActivity.RESULT_CODE){//为true表示是频道管理回调回来的
            jsonStr = data.getStringExtra(ChannelActivity.RESULT_JSON_KEY);//得到栏目管理的结果
            Toast.makeText(getContext(),jsonStr,Toast.LENGTH_SHORT).show();Log.i("main",jsonStr);
// 做更新操作mTl.removeAllTabs();//清空之前的栏目
            //把新选择的栏目结果更新到tablayout上
            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()){mTl.addTab(mTl.newTab().setText(channelBeens.get(i).getName()));}}}}private void initView(View view) {mVp = (ViewPager) view.findViewById(R.id.vp);mTl = (TabLayout) view.findViewById(R.id.tl);mImgbtn = (ImageButton) view.findViewById(R.id.imgbtn);
     //这是按钮点击事件 ,点击按钮启动频道管理mImgbtn.setOnClickListener(new View.OnClickListener() {@Override
            public void onClick(View view) {switch (view.getId()){default:break;case R.id.imgbtn:ChannelActivity.startChannelActivity((AppCompatActivity) getContext(),channelBeens);break;}}});}
}

效果图







版权声明:本文为博主原创文章,未经博主允许不得转载。

使用 draggrid 实现 仿今日头条频道管理(详细步骤)相关推荐

  1. Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)

    前言 上篇博客我们说到了今日头条频道管理的操作交互体验,我也介绍了2个GridView之间Item的相互移动.详情请參考:Android 仿今日头条频道管理(上)(GridView之间Item的移动和 ...

  2. 今日头条 频道管理(删除、添加、拖动)

    频道管理共分为两部分: 一.频道的删除和添加 二.频道的拖动 一.频道的删除和添加 利用监听来进行动画的执行. 动画:以item本身创建Bitmap, 然后放入顶层ViewGroup 执行动画并监听A ...

  3. 今日头条频道管理(自带动画效果)

    1. 在新的Module 里面 build.gradle进行添加 compile 'com.github.andyoom:draggrid:v1.0.1' 2.在项目里build.gradle中添加 ...

  4. android 横向滚动 导航,仿今日头条横向滚动导航栏--原生js

    咳咳!先打一波小广告,在上一篇里忘记了,那啥--我的那个个人博客做好了-->(我的博客) 好嘞,言归正传,说说我们的效果. 其实就是实现横向滑动,进行选择. 原理: 鼠标按下,获取当前鼠标坐标, ...

  5. IOS每日精选源码,边缘识别导航条管理高仿今日头条语音查询汇率源码

    CIDetector边缘识别 超级简单的导航条管理工具EasyNavigation navigationbar 高仿今日头条频道选择弹框 iOS一个比较实用的侧边栏管理器 联动tableView,菜单 ...

  6. 精仿今日头条新闻网站带自动采集接口更新文章源码

    精仿今日头条新闻网站带自动采集接口更新文章源码,亲测可用:mysql5.7.PHP7.3支持页面自适应. 功能特点: 1.站点集成新网,网易,搜狐,人民网,中新网等多家新闻接口,全自动采集发布,无需人 ...

  7. 仿今日头条后台管理系统(二)

    仿今日头条后台管理系统(二) ###03-登录模块-分析表单组件 <!-- el-form 表单容器 --> <!-- ref="form" 获取dom使用--& ...

  8. Android仿今日头条的开源项目

    起因 看到众多大神纷纷有了自己的开源项目,于是自己琢磨着也想做一个开源项目来学习下,因为每次无聊必刷的app就是今日头条,评论简直比内容都精彩,所以我打算仿今日头条来练练手,期间也曾放弃过,也遇到很多 ...

  9. vue仿今日头条_Vue仿今日头条实例详解

    前言 vue也弄了一段时间了,前段时间一直想用vue写个移动端,加之年底也不是很忙,于是前几天便着手开始弄了,到今天为止也算是勉强能看了 因为也是纯粹的写写前端页面,所以数据方面用的是mock.js, ...

最新文章

  1. power bi tutorial within Unilever
  2. rmmod无法卸载驱动_笔记:linux驱动开发(1、了解内核模块)
  3. nodejs复制服务器文件,nodejs文件夹深层复制功能
  4. python 网格_Python | 网格到情节
  5. app启动页自动跳转源码_Jenkins集成appium自动化测试(Windows篇)
  6. Java基础学习总结(139)——Java8 Stream之Stream接口入门简介
  7. Xtrabackup远程备份+限速
  8. Qt之多线程编程初识
  9. MSSQL → 04:表的创建与维护
  10. drupal建站案例_Drupal8 快速建站教程
  11. 转载 DM9000的调试
  12. 鹰式价差matlab,期权价差
  13. 淘宝嘉年华5元无门槛红包使用范围 怎么设置淘宝嘉年华5元无门槛红包
  14. 量化投资学习——Boost多因子选股综述
  15. windows聚焦壁纸不更新_Win10无法自动更换聚焦锁屏壁纸怎么办?
  16. 中文自动文本摘要生成指标计算,Rouge/Bleu/BertScore/QA代码实现
  17. 大数据分析哪款软件好用?如何进行大数据分析
  18. jquery选择器通配符_jQuery选择器不等于通配符
  19. 傅里叶变换解析-来龙去脉全解析
  20. 【FFmpeg学习】H264 视频码流分析

热门文章

  1. 2021年淘宝客系列教程(二)事前准备
  2. 讨论 如何带领好新的员工
  3. html 字号代码,html文字代码
  4. c# 反射的使用场景
  5. 百度地图设置卫星、矢量模式,球模型和瓦片模型加载
  6. MPB以及周围软件的浅谈介绍
  7. 油井远程监控解决方案
  8. 计算机科学与技术广东,广东中山计算机科学与技术
  9. Python采集双色球数据,做数据分析,让我自己实现自己的富豪梦
  10. dataframe计算相关系数矩阵