Android RecyclerView仿新闻头条的频道管理功能

需要在build里添加依赖

 compile 'com.android.support:recyclerview-v7:25.3.1'

布局文件activity_main

<android.support.v7.widget.RecyclerView
    android:layout_weight="1"
    android:id="@+id/recyclerView_up"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.RecyclerView>
  <!--用来划分上下的频道-->
  <View
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:background="#999999">
  </View>
  <android.support.v7.widget.RecyclerView
    android:layout_weight="1"
    android:id="@+id/recyclerView_down"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
  </android.support.v7.widget.RecyclerView>

在layout下定义一个message.xml布局文件,用来显示RecyclerView里的文字,跟listview的意义差不多

 <TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    android:padding="3dp"
    android:text="123123123" />

写一个 MyItemOnClickListener 接口用来监听点击事件,在里边传入两个参数,第一个是试图,第二是点击的下标

public interface MyItemOnClickListener {
  void onClick(View view,int position);
}

RecyclerView的适配器类

//RecyclerView.Adapter<?>里写的是优化继承ViewHolder的帮助类
public class ViewAdapter extends RecyclerView.Adapter<ViewAdapter.MyViewHolder> {
  private Context mContext;
  /**
  *特别注意一下mList后面一定要默认赋值,不然运行的时候会报错,因为我们默认上面的RecyclerView是没有添加数据的
  */
  private List<String> mList=new ArrayList<>();
  private MyItemOnClickListener myItemOnClickListener;
  public ViewAdapter(Context context) {
    this.mContext = context;
  }
  //传数组的方法
  public void setMessage(List<String> list) {
    this.mList = list;
  }
  //写个方法把接口传过来
  public void setMyItemOnClickListener(MyItemOnClickListener myItemOnClickListener)
  {
    this.myItemOnClickListener = myItemOnClickListener;
  }
  @Override
  public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    //打气筒填充我们自定义的message.xml的试图
    View view = View.inflate(mContext, R.layout.messgae, null);
    //优化
    final MyViewHolder holder = new MyViewHolder(view);
    //监听
    view.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        //调用我们自定义接口的方法
        myItemOnClickListener.onClick(v, holder.getLayoutPosition());
      }
    });
    return holder;
  }
  @Override
  public void onBindViewHolder(MyViewHolder holder, int position) {
    MyViewHolder viewHolder = holder;
    viewHolder.textView.setText(mList.get(position));
  }
  @Override
  public int getItemCount() {
    return mList.size();
  }
  //ViewHolder优化
  static class MyViewHolder extends RecyclerView.ViewHolder {
    private TextView textView;
    public MyViewHolder(View itemView) {
      super(itemView);
      textView = (TextView) itemView.findViewById(R.id.textView);
    }
  }
}

在MainActivity的实现

public class MainActivity extends AppCompatActivity {
  private RecyclerView recyclerView_up;
  private RecyclerView recyclerView_down;
  private List<String> listUp = new ArrayList<>();
  private List<String> listDown = new ArrayList<>();
  private ViewAdapter adapterUp;
  private ViewAdapter adapterDown;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //添加数据
    initData();
    initView();
  }
  //添加数据
    for (int i = 0; i < 15; i++) {
    //默认的我们只给下面的RecyclerView添加了数据
      listDown.add("频道管理" + i);
    }
  }
  private void initView() {
    recyclerView_up = (RecyclerView) findViewById(R.id.recyclerView_up);
    recyclerView_down = (RecyclerView) findViewById(R.id.recyclerView_down);
    initUp();
    initDown();
  }
  private void initUp() {
    //创建适配器
    adapterUp = new ViewAdapter(MainActivity.this);
    //添加数据,我们默认创建的时候是空的
    adapterUp.setMessage(listUp);
    recyclerView_up.setAdapter(adapterUp);
    //RecyclerView显示样式
    GridLayoutManager gridLayoutManagerUp = new GridLayoutManager(this, 3);
    recyclerView_up.setLayoutManager(gridLayoutManagerUp);
    //点击监听
    adapterUp.setMyItemOnClickListener(new MyItemOnClickListener() {
      @Override
      public void onClick(View view, int position) {
        Log.e("Up", "上" + position);
        //下面的RecyclerView添加当前点击的条目信息并刷新数组
        listDown.add(listUp.get(position));
        adapterDown.setMessage(listDown);
        adapterDown.notifyDataSetChanged();
        //从当前数组移除数据并刷新数组
        listUp.remove(position);
        adapterUp.setMessage(listUp);
        adapterUp.notifyDataSetChanged();
      }
    });
  }
  private void initDown() {
    adapterDown = new ViewAdapter(MainActivity.this);
    adapterDown.setMessage(listDown);
    recyclerView_down.setAdapter(adapterDown);
    GridLayoutManager gridLayoutManagerDown = new GridLayoutManager(this, 3);
    recyclerView_down.setLayoutManager(gridLayoutManagerDown);
    adapterDown.setMyItemOnClickListener(new MyItemOnClickListener() {
      @Override
      public void onClick(View view, int position) {
        Log.e("Down", "下" + position);
        //下面的RecyclerView添加当前点击的条目信息并刷新数组
        listUp.add(listDown.get(position));
        adapterUp.setMessage(listUp);
        adapterUp.notifyDataSetChanged();
        //从当前数组移除数据并刷新数组
        listDown.remove(position);
        adapterDown.setMessage(listDown);
        adapterDown.notifyDataSetChanged();
      }
    });
  }
}

以上所述是小编给大家介绍的Android RecyclerView仿新闻头条的频道管理功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Android应用中仿今日头条App制作ViewPager指示器

    一.概述 顶部ViewPager指示器的字体变色,该效果图是这样的: 大概是今天头条的app,神奇的地方就在于,切换ViewPager页面的时候,顶部指示器改成了字体颜色的变化,个人觉得还是不错的. 那么核心的地方就是做一个支持字体这样逐渐染色就可以了,我大概想了32s,扫描了一些可能实现的方案,最终定位了一个靠谱的,下面我就带大家开始实现的征程. 实现之前贴一下我们的效果图: 1.简单使用 效果如上图了,关于颜失色的改变我添加了两个方向,一个是左方向,一个是有方向. 单纯的使用,可能觉得没什么

  • Android 仿今日头条简单的刷新效果实例代码

    点击按钮,先自动进行下拉刷新,也可以手动刷新,刷新完后,最后就多一行数据.有四个选项卡. 前两天导师要求做一个给本科学生预定机房座位的app,出发点来自这里.做着做着遇到很多问题,都解决了.这个效果感觉还不错,整理一下. MainActivity package com.example.fragmentmytest; import android.content.DialogInterface; import android.graphics.Color; import android.os.B

  • Android实现仿网易今日头条等自定义频道listview 或者grideview等item上移到另一个view中

    我这里只是简单的用了两个listview来实现的,先上效果图.比较粗糙.预留了自定义的空间. 思路: 从上图应该可以看的出来.就是上下两个listview.点击下面的ltem.会动态的移动到上一个listview的最后.上面的listview 为listview1,下面的为listview2. 点击listview2,获取到view ,设置一个动画,移动到listview1 ,listview2中删除被点的item.listview1中新增一个. 上代码: Mainactivity.java 部

  • Android仿今日头条滑动页面导航效果

    最近项目中用到了滑动页面,也就是和目前市场上很火的"今日头条"页面滑动类似,在网上找了一下,大部分都是用ViewPager来实现的,刚开始我用的是ViewPager+ViewGroup,上面的标题按钮用的是HorizontalScrollView,写完之后感觉效果比较生硬,果断换掉,发现了一个效果比较好的第三方,也就是今天的主题:PagerSlidingTabStrip.好了,下面来具体介绍一下PagerSlidingTabStrip,进行一下源码解析. 一.看一下demo的样子吧 二

  • Android使用RecyclerView实现今日头条频道管理功能

    使用过今日头条的伙计们对这个效果肯定很熟悉.拖拽可排序,点击标签后可以删除.今天我们采用RecyclerView来实现. 实现思路: 通过ItemTouchHelper来绑定RecyclerView的子控件触摸事件. 当滑动拖拽的时候,通知适配器来交换两个子控件的显示位置. 更改数据源,使数据源与子空间显示内容一致. 这就是实现的基本思路,是不是很简单?当然,首先要了解一下ItemTouchHelper这哥们儿是干啥的,有什么作用. This is a utility class to add

  • Android仿今日头条APP实现下拉导航选择菜单效果

    本文实例为大家分享了在Android中如何实现下拉导航选择菜单效果的全过程,供大家参考,具体内容如下 关于下拉导航选择菜单效果在新闻客户端中用的比较多,当然也可以用在其他的项目中,这样可以很方便的选择更多的菜单.我们可以让我们的应用顶部有左右滑动或进行切换的导航菜单,也可以为了增强用户体验在应用中添加这样的下拉导航选择菜单效果. 关于它的实现原理,其实也是挺简单的,就是使用PopupWindow来进行展现,在显示时控制其高度并配置以相应的动画效果.在PopupWindow中我使用GridView

  • Android 仿今日头条评论时键盘自动弹出的效果(推荐)

    Android 仿今日头条评论时键盘自动弹出的效果:当点击评论时,弹出对话框,同时弹出软键盘,当点击返回键时,将对话框关闭,不只是关闭软键盘. 效果图: 对这个对话框设置一个style效果: <style name="inputDialog" parent="@android:style/Theme.Holo.Light.Dialog"> <item name="android:windowBackground">@col

  • Android RecyclerView仿新闻头条的频道管理功能

    需要在build里添加依赖 compile 'com.android.support:recyclerview-v7:25.3.1' 布局文件activity_main <android.support.v7.widget.RecyclerView android:layout_weight="1" android:id="@+id/recyclerView_up" android:layout_width="match_parent" a

  • Android实现仿今日头条点赞动画效果实例

    目录 一.前言 二.需求拆分 三.实现方案 1.点赞控件触摸事件处理 2.点赞动画的实现 2.1.点赞效果图片的获取和存储管理 2.2.点赞表情图标动画实现 2.3.点赞次数和点赞文案的绘制 3.存放点赞动画的容器 4.启动动画 四.遇到的问题 五.实现效果 六.完整代码获取 七.参考和感谢 总结 一.前言 我们在今日头条APP上会看到点赞动画效果,感觉非常不错,正好公司有点赞动画的需求,所以有了接下来的对此功能的实现的探索. 二.需求拆分 仔细观察点赞交互,看出大概以下几个步骤: 1:点赞控件

  • Android Recyclerview实现上拉加载更多功能

    在项目中使用列表的下拉刷新和上拉加载更多是很常见的功能,下拉刷新我们可以用Android自带的SwipeRefreshLayout这个很好解决.但是上拉加载更多就要去找一些框架了,刚开始的时候我找到一个Mugen的github开源框架,但是有个问题,当页面能够一次加载全部item的时候,上拉加载的功能就失效了. 这是因为当界面一次能够加载完全部item的时候,继续往上拉,Recyclerview的滑动监听,中的onScrolled方法只会在页面加载的时候调用一次,只后就不会被调用了,并且dy=0

  • Android RecyclerView添加上拉加载更多功能

    上一篇文章已经介绍了如何为RecyclerView添加FootView,在此基础上,要添加分页加载的功能其实已经很简单了. 上一篇文章地址:为RecyclerView添加FootView和HeadView 效果:(源码在文章结尾) 实现关键 在上一篇代码的基础上,只需要在onBindViewHolder(ViewHolder holder, int position)函数中添加一定修改就可以了,如下: @Override public void onBindViewHolder(ViewHold

  • Android实现今日头条订阅频道效果

    本文实例为大家分享了Android仿今日头条订阅频道,供大家参考,具体内容如下 源码:Android实现今日头条订阅频道 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.andro

  • Android自定义gridView仿头条频道拖动管理功能

    项目中遇到这样个需求:app的功能导航需要可拖动排序,类似头条中的频道拖动管理.效果如下,gif不是很顺畅,真机会好很多. 虽然类似的文章网上搜一下有很多,但写的都不令人满意,注释不清晰,而且动画还不够流畅.经本人整理优化后,拿出来供后续有需要的使用. 实现原理: gridView作为基本控件 WindowManager.addView的方式实现可拖动的view TranslateAnimation实现移动动画,动画完后更新adapter即可 主要的实现原理上面已经说明,源码中关键的地点也有注释

  • Android实现仿网易新闻的顶部导航指示器

    我们知道,页面导航器(Navigator)在几乎所有的项目中都会用到,平时大多数时候为了节省时间,都会直接在github上面拿别人的开源项目来用,最近自己在复习自定义View,就尝试封装了一下,源码参考项目PagerSlidingTabStrip 大家先来看一下效果图 基于文字的页面导航器 基于图片的页面导航器 使用方法 主要步骤分为三步 1)在xml文件里面 <com.xujun.viewpagertabindicator.TabPagerIndicator android:id="@+

随机推荐