使用 draggrid 实现 仿今日头条频道管理(详细步骤)
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 实现 仿今日头条频道管理(详细步骤)相关推荐
- Android 仿今日头条频道管理(下)(GridView之间Item的移动和拖拽)
前言 上篇博客我们说到了今日头条频道管理的操作交互体验,我也介绍了2个GridView之间Item的相互移动.详情请參考:Android 仿今日头条频道管理(上)(GridView之间Item的移动和 ...
- 今日头条 频道管理(删除、添加、拖动)
频道管理共分为两部分: 一.频道的删除和添加 二.频道的拖动 一.频道的删除和添加 利用监听来进行动画的执行. 动画:以item本身创建Bitmap, 然后放入顶层ViewGroup 执行动画并监听A ...
- 今日头条频道管理(自带动画效果)
1. 在新的Module 里面 build.gradle进行添加 compile 'com.github.andyoom:draggrid:v1.0.1' 2.在项目里build.gradle中添加 ...
- android 横向滚动 导航,仿今日头条横向滚动导航栏--原生js
咳咳!先打一波小广告,在上一篇里忘记了,那啥--我的那个个人博客做好了-->(我的博客) 好嘞,言归正传,说说我们的效果. 其实就是实现横向滑动,进行选择. 原理: 鼠标按下,获取当前鼠标坐标, ...
- IOS每日精选源码,边缘识别导航条管理高仿今日头条语音查询汇率源码
CIDetector边缘识别 超级简单的导航条管理工具EasyNavigation navigationbar 高仿今日头条频道选择弹框 iOS一个比较实用的侧边栏管理器 联动tableView,菜单 ...
- 精仿今日头条新闻网站带自动采集接口更新文章源码
精仿今日头条新闻网站带自动采集接口更新文章源码,亲测可用:mysql5.7.PHP7.3支持页面自适应. 功能特点: 1.站点集成新网,网易,搜狐,人民网,中新网等多家新闻接口,全自动采集发布,无需人 ...
- 仿今日头条后台管理系统(二)
仿今日头条后台管理系统(二) ###03-登录模块-分析表单组件 <!-- el-form 表单容器 --> <!-- ref="form" 获取dom使用--& ...
- Android仿今日头条的开源项目
起因 看到众多大神纷纷有了自己的开源项目,于是自己琢磨着也想做一个开源项目来学习下,因为每次无聊必刷的app就是今日头条,评论简直比内容都精彩,所以我打算仿今日头条来练练手,期间也曾放弃过,也遇到很多 ...
- vue仿今日头条_Vue仿今日头条实例详解
前言 vue也弄了一段时间了,前段时间一直想用vue写个移动端,加之年底也不是很忙,于是前几天便着手开始弄了,到今天为止也算是勉强能看了 因为也是纯粹的写写前端页面,所以数据方面用的是mock.js, ...
最新文章
- power bi tutorial within Unilever
- rmmod无法卸载驱动_笔记:linux驱动开发(1、了解内核模块)
- nodejs复制服务器文件,nodejs文件夹深层复制功能
- python 网格_Python | 网格到情节
- app启动页自动跳转源码_Jenkins集成appium自动化测试(Windows篇)
- Java基础学习总结(139)——Java8 Stream之Stream接口入门简介
- Xtrabackup远程备份+限速
- Qt之多线程编程初识
- MSSQL → 04:表的创建与维护
- drupal建站案例_Drupal8 快速建站教程
- 转载 DM9000的调试
- 鹰式价差matlab,期权价差
- 淘宝嘉年华5元无门槛红包使用范围 怎么设置淘宝嘉年华5元无门槛红包
- 量化投资学习——Boost多因子选股综述
- windows聚焦壁纸不更新_Win10无法自动更换聚焦锁屏壁纸怎么办?
- 中文自动文本摘要生成指标计算,Rouge/Bleu/BertScore/QA代码实现
- 大数据分析哪款软件好用?如何进行大数据分析
- jquery选择器通配符_jQuery选择器不等于通配符
- 傅里叶变换解析-来龙去脉全解析
- 【FFmpeg学习】H264 视频码流分析