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仿新闻头条的频道管理功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-08-02 16:57:58

Android RecyclerView仿新闻头条的频道管理功能的相关文章

android高仿今日头条 --新闻阅读器

开发流程 第一篇:(android高仿系列)今日头条 --新闻阅读器 (一) 涉及到的知识点有 1.slidingmenu.lib  (侧拉菜单包)   使用方法配置以及下载:点击这里   实现:客户端中左右2边侧拉菜单 2.命名规范可以参考:android命名规范   实现:源码中包.类.方法名称的统一 3.如何反编译:反编译就这么简单   实现:客户端中资源文件的获取 4.Fragment以及HorizontalScrollView的使用,以及重写HorizontalScrollView  

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

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

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

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

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

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

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

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

Android高仿京东垂直循环滚动新闻栏_Android

实现思路其实很简单,就是一个自定义的LinearLayout,并且textView能够循环垂直滚动,而且条目可以点击,显示区域最多显示2个条目,并且还有交替的属性垂直移动的动画效果,通过线程来控制滚动的实现. 不多说看效果: 代码实现 我们先来为控件设置自定义属性: <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="JDAdv

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

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

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

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

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

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