1,效果图

2,实现

  • 1,Xml布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><RelativeLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingTop="15dp"><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="我的频道"/><TextView
            android:id="@+id/tv_toutiao_one_my"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击进入频道"android:layout_marginLeft="90dp"/><TextView
            android:id="@+id/tv_toutiao_one_edit"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="编辑"android:textColor="@color/red"android:layout_alignParentRight="true"/></RelativeLayout><android.support.v7.widget.RecyclerView
        android:id="@+id/rv_toutioa_one_my"android:layout_width="match_parent"android:layout_height="wrap_content"android:overScrollMode="never"/><RelativeLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingTop="15dp"><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="其他频道"/><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="点击添加频道"android:layout_marginLeft="90dp"/></RelativeLayout><android.support.v7.widget.RecyclerView
        android:id="@+id/rv_toutioa_one_add"android:layout_width="match_parent"android:layout_height="wrap_content"android:overScrollMode="never"/></LinearLayout>
  • 2,Activity文件
public class TouTiaoTwoActivity extends AppCompatActivity {private android.widget.TextView tvtoutiaoonemy;private android.widget.TextView tvtoutiaooneedit;private android.support.v7.widget.RecyclerView rvtoutioaonemy;private android.support.v7.widget.RecyclerView rvtoutioaoneadd;private ArrayList<String> mDataOne;private ArrayList<String> mDataTwo;private TouTiaoTwoMyAdapter mTouTiaoTwoMyAdapter;private TouTiaoTwoAdapter mTouTiaoTwoAdapter;boolean isEdit = false;@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_toutioa_one);this.rvtoutioaoneadd = (RecyclerView) findViewById(R.id.rv_toutioa_one_add);this.rvtoutioaonemy = (RecyclerView) findViewById(R.id.rv_toutioa_one_my);this.tvtoutiaooneedit = (TextView) findViewById(R.id.tv_toutiao_one_edit);this.tvtoutiaoonemy = (TextView) findViewById(R.id.tv_toutiao_one_my);//初始化第一个列表initOneList();//初始化第二个列表initTwoList();//编辑点击tvtoutiaooneedit.setOnClickListener(view -> {if(isEdit){//处于编辑状态,点击变成正常状态tvtoutiaooneedit.setText("编辑");tvtoutiaoonemy.setText("点击进入频道");//我的频道右上角图标隐藏mTouTiaoTwoMyAdapter.showDeleteIcon(false);//禁用拖拽//mTouTiaoOneAdapter.disableDragItem();}else {//点击变成编辑状态tvtoutiaooneedit.setText("完成");tvtoutiaoonemy.setText("拖拽可以排序");//我的频道右上角图标显示mTouTiaoTwoMyAdapter.showDeleteIcon(true);// 开启拖拽//mTouTiaoOneAdapter.enableDragItem(itemTouchHelper);}isEdit=!isEdit;});}private void initTwoList() {GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4);mDataTwo = new ArrayList<>();mDataTwo.add("本地");mDataTwo.add("房产");mDataTwo.add("直播");mDataTwo.add("时尚");mDataTwo.add("小说");mDataTwo.add("历史");mDataTwo.add("育儿");mDataTwo.add("搞笑");mDataTwo.add("美食");mDataTwo.add("养生");mDataTwo.add("电影");mDataTwo.add("手机");mDataTwo.add("旅游");rvtoutioaoneadd.setLayoutManager(gridLayoutManager);mTouTiaoTwoAdapter = new TouTiaoTwoAdapter(R.layout.item_toutiao_two, mDataTwo);rvtoutioaoneadd.setAdapter(mTouTiaoTwoAdapter);//设置添加,移除动画rvtoutioaoneadd.setItemAnimator(new DefaultItemAnimator());mTouTiaoTwoAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() {@Overridepublic void onItemClick(BaseQuickAdapter adapter, View view, int position) {String title = mDataTwo.get(position);Log.e("MMM", "onItemClick: "+position+"||"+title );//加入到我的频道mDataOne.add(title);mTouTiaoTwoMyAdapter.notifyItemChanged(mDataOne.size()-1);//mTouTiaoTwoAdapter.notifyItemInserted(mDataOne.size()-1);
//mDataTwo.remove(position);mTouTiaoTwoAdapter.notifyItemRemoved(position);//mTouTiaoTwoAdapter.notifyDataSetChanged();}});}private void initOneList() {GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 4);mDataOne = new ArrayList<>();mDataOne.add("关注");mDataOne.add("推荐");mDataOne.add("热点");mDataOne.add("世界杯");mDataOne.add("军事");mDataOne.add("国际");mDataOne.add("问答");mDataOne.add("视频");mDataOne.add("图片");mDataOne.add("娱乐");mDataOne.add("科技");mDataOne.add("国风");mDataOne.add("地理");mDataOne.add("地球仪");rvtoutioaonemy.setLayoutManager(gridLayoutManager);mTouTiaoTwoMyAdapter = new TouTiaoTwoMyAdapter(this, mDataOne, new TouTiaoTwoMyAdapter.AdapterCallBack() {@Overridepublic void onItemClickListener(TouTiaoTwoMyAdapter.ViewHolder viewHolder, int pos) {//点击监听//处于编辑状态if (isEdit){//点击移除,前两个除外if (pos>1){//加入频道推荐,//将其移动到第一个位置String title = mDataOne.get(pos);//Log.e(TAG, "onItem--my--Click: "+position+"||"+title );mDataTwo.add(0,title);mTouTiaoTwoAdapter.notifyItemInserted(0);//mTouTiaoTwoAdapter.notifyDataSetChanged();//我的频道,移除点击的数据mDataOne.remove(pos);mTouTiaoTwoMyAdapter.notifyItemRemoved(pos);//刷新数据mTouTiaoTwoMyAdapter.notifyItemChanged(pos,mDataOne.size()-pos);//mTouTiaoOneAdapter.notifyDataSetChanged();}}else {//点击进入对应详情页String title = mDataOne.get(pos);Intent intent = new Intent(TouTiaoTwoActivity.this, TouTiaoDetailActivity.class);intent.putExtra("title",title);startActivity(intent);}}@Overridepublic boolean onItemLongClickListener(TouTiaoTwoMyAdapter.ViewHolder viewHolder, int pos) {if (isEdit){return false;}if (pos > 1){//长按处于编辑状态isEdit=true;//点击变成编辑状态tvtoutiaooneedit.setText("完成");tvtoutiaoonemy.setText("拖拽可以排序");//我的频道右上角图标显示mTouTiaoTwoMyAdapter.showDeleteIcon(true);return true;}return false;}});//自定义类实现拖拽,侧滑删除MyItemTouchHandler myItemTouchHandler = new MyItemTouchHandler(mTouTiaoTwoMyAdapter);ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new MyItemTouchHandler(mTouTiaoTwoMyAdapter));itemTouchHelper.attachToRecyclerView(rvtoutioaonemy);rvtoutioaonemy.setAdapter(mTouTiaoTwoMyAdapter);//设置添加,移除动画rvtoutioaonemy.setItemAnimator(new DefaultItemAnimator());}
}
  • 3,第一个列表的Adapter文件
public class TouTiaoTwoMyAdapter extends MyItemTouchHandler.ItemTouchAdapterImpl {private final LayoutInflater mLayoutInflater;private Context mContext;private List<String>mData;AdapterCallBack mAdapterCallBack;public TouTiaoTwoMyAdapter(Context context, List<String> data,AdapterCallBack adapterCallBack) {mContext = context;mData = data;this.mAdapterCallBack=adapterCallBack;mLayoutInflater = LayoutInflater.from(context);}@Overridepublic void onItemMove(int fromPosition, int toPosition) {}/**禁止自动拖拽* @return*/
//    @Override
//    protected boolean autoOpenDrag() {//        return false;
//    }/**禁止滑动删除* @return*/@Overrideprotected boolean autoOpenSwipe() {return false;}@Overridepublic void onItemRemove(int position) {}@NonNull@Overridepublic RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {View view = mLayoutInflater.inflate(R.layout.item_toutiao_one, parent, false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder,@SuppressLint("RecyclerView") int position) {if (holder instanceof ViewHolder) {((ViewHolder) holder).tvTitle.setText(mData.get(position));if (isDelete){if (position > 1) {((ViewHolder) holder).ivDelete.setVisibility(View.VISIBLE);}}else {((ViewHolder) holder).ivDelete.setVisibility(View.GONE);}holder.itemView.setOnClickListener(view -> {//点击监听mAdapterCallBack.onItemClickListener((ViewHolder) holder,position);});//            //长按点击监听holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {@Overridepublic boolean onLongClick(View view) {mAdapterCallBack.onItemLongClickListener((ViewHolder) holder,position);return false;}});}}private boolean isDelete;public void showDeleteIcon(boolean isDelete){this.isDelete = isDelete;notifyDataSetChanged();}public interface AdapterCallBack{void onItemClickListener(ViewHolder viewHolder,int pos);boolean onItemLongClickListener(ViewHolder viewHolder,int pos);}@Overridepublic int getItemCount() {return mData.size();}public class ViewHolder extends RecyclerView.ViewHolder {TextView tvTitle;ImageView ivDelete;public ViewHolder(View itemView) {super(itemView);tvTitle = itemView.findViewById(R.id.tv_item_toutiao_one_title);ivDelete = itemView.findViewById(R.id.iv_item_toutiao_one_delete);}}
}
  • 5,第二个列表的Adapter,普通的Adapter,随意写,赋值就可以
public class TouTiaoTwoAdapter extends BaseQuickAdapter<String,BaseViewHolder> {public TouTiaoTwoAdapter(int layoutResId, @Nullable List<String> data) {super(layoutResId, data);}@Overrideprotected void convert(BaseViewHolder helper, String item) {helper.setText(R.id.tv_item_toutiao_two_title,item);}
}
  • 6,两个列表用的Item布局基本一样
  • 第一个item_toutiao_one:
<?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="50dp"android:layout_marginTop="5dp"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"><TextView
        android:id="@+id/tv_item_toutiao_one_title"android:layout_width="match_parent"android:layout_height="match_parent"android:text="标题"android:layout_margin="5dp"android:gravity="center"android:background="#f0f0f0"/><ImageView
        android:id="@+id/iv_item_toutiao_one_delete"android:layout_width="10dp"android:layout_height="10dp"android:src="@color/red"android:layout_alignParentRight="true"android:visibility="gone"/></RelativeLayout>
  • 第二个item_toutiao_two:
<?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="50dp"android:layout_marginTop="5dp"android:layout_marginLeft="5dp"android:layout_marginRight="5dp"><TextView
        android:id="@+id/tv_item_toutiao_two_title"android:layout_width="match_parent"android:layout_height="match_parent"android:text="标题"android:layout_margin="5dp"android:gravity="center"android:background="#f0f0f0"/></RelativeLayout>
  • 7,源码
    源码下载

RecyclerView仿头条新闻频道管理相关推荐

  1. 新闻频道管理的炫酷实现

    新闻频道管理的炫酷实现 自定义GridLayout控件,可以在新闻咨询类APP中的管理页面使用到,也可以应用在类别管理中,总之,可以帮助我们设计更加规范和炫酷的手机页面. 新闻类app是最常见的应用之 ...

  2. 仿头条新闻资讯dz模板/Discuz新闻资讯商业版GBK模板

    Discuz仿今日头条模板,Discuz新闻资讯商业版GBK模板.顾名思义,头条新闻资讯模板,适合做资讯类网站,喜欢该风格的朋友可以下载看看. 基础安裝 1后台-门户网-频道栏目-添加频道: 2搜索结 ...

  3. 仿头条新闻资讯dz模板 Discuz新闻资讯商业版GBK模板源码

    Discuz仿今日头条模板,Discuz新闻资讯商业版GBK模板,是dz的模板哈,要在dz里面用. 顾名思义,头条新闻资讯模板,适合做资讯类网站,喜欢该风格的朋友可以下载看看. 1.模板版本支持:di ...

  4. 仿网易新闻栏目管理(频道管理)功能

    仿网易新闻客户端栏目的拖拽,删除,添加效果.在此要感谢vipra,此效果是在这个项目的基础上修改的 先上效果图: 简单说一下实现原理: 首先看一下效果图,分为上下两个GridView,上边的为可以拖拽 ...

  5. Android使用recyclerview实现头条新闻动态展示

    今天要做的就是使用RecyclerView获取后台数据并展示为头条新闻的样式.直接上图: 后台的数据格式: 1.xml中添加控件 <?xml version="1.0" en ...

  6. Android 仿今日头条的频道管理

    //主布局 activity_main.xml<?xml version="1.0" encoding="utf-8"?> <Relative ...

  7. 今日头条 新闻频道展示

    思路:用HorizontalScrollView 来对频道进行展示,用ViewPager + FragmentPagerAdapter + Fragment 方式来展示每个栏目下的新闻列表 一:对频道 ...

  8. 高仿网易新闻频道选择器

    前言 前段时间公司做一个新闻类的项目,需要支持频道编辑,缓存等功能,界面效果逻辑就按照最新版的网易新闻来,网上没找到类似的轮子,二话不说直接开撸,为了做到和网易效果一模一样还是遇到不少坑和细节,这在此 ...

  9. 仿头条新闻app,实现下拉刷新,上拉加载分页

    ---恢复内容开始--- 环境appcan appcan.ready(function() {page = 1;type = 0;searchDate = getNowTime();highSearc ...

最新文章

  1. java request get json数据_Java中,获取request中json数据
  2. 快收藏!52篇25万字,微服务、云原生、容器、K8S、Serverless精华文章集锦
  3. [译] ⚛ React 状态管理工具博物馆
  4. Android View 事件分发机制详解
  5. JSONP - 跨域AJAX
  6. WebAssembly 系列(五)为什么 WebAssembly 更快? 1
  7. EnforceLearning:迁移学习-监督训练与非监督训练
  8. swing 选择对话框_Java Swing –日期选择器对话框
  9. 从PeopleEditor控件中取出多用户并更新到列表
  10. 详解3D点云分割网络 Cylindrical and Asymmetrical 3D Convolution Networksfor LiDAR Segmentation
  11. OpenCV blur和boxFilter (方框型滤波器)
  12. Caused by: java.sql.SQLException: Unable to open a test connection to the given database报错无法打开到给定数据库
  13. python post请求参数化,参数化包含JSON主体的python POST请求
  14. 微信支付需要证书认证时报“出现了内部错误”
  15. DB2-SQLCODE 错误码大全---[IBM官方]
  16. 虚拟化服务器不能远程控制,kvm虚拟化如何搭建? 向日葵远程控制
  17. 中心极限定理 central limit theorem
  18. 手撸JDK之ReentrantLock锁那点事
  19. Redis应用场景-排行榜
  20. 软考:头脑风暴与德尔菲法的区别(转)

热门文章

  1. 一个人再牛,最终还是要靠团队
  2. 第三届蓝桥杯java本科解题报告
  3. Acwing4261. 孤独的照片
  4. 华南理工2018计算机组成原理 平时作业,华南理工大学 计算机组成原理复习提纲.doc...
  5. 连续背包 (背包套背包)
  6. 人工智能适合女生学吗?女生学AI
  7. 语音处理:Python实现wav与pcm文件格式转换
  8. 想开发一套老黄历网站或者APP,Python项目代码
  9. matlab 画狗头彩蛋,我用matlab画制动力分配曲线,求程序代码
  10. INM05、INM1、INM2、INM3、INM4、INM5、INM6、INM7液压马达