Android中RecyclerView上拉下拉,分割线,多条目的实例代码

 更新时间:2017年1月22日 11:04  点击:2175
这篇文章介绍了Android中RecyclerView上拉下拉,分割线,多条目的实例代码,非常具有参考价值,有需要的朋友可以参考一下

 

 代码如下复制代码

//activity的xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <android.support.v4.widget.SwipeRefreshLayout

    android:id="@+id/swipeRefreshLayout"

    android:layout_width="match_parent"

    android:layout_above="@+id/progress"

    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView

      android:id="@+id/recyclerView"

      android:layout_width="match_parent"

      android:layout_height="match_parent">

    

  

  <ProgressBar

    android:id="@+id/progress"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_centerHorizontal="true"

    android:visibility="gone"

    android:layout_alignParentBottom="true"/>

item1的xml和item2的xml就一个背景颜色不同

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:background="#f00000"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <TextView

    android:id="@+id/name"

    android:layout_width="match_parent"

    android:layout_height="50dp"

    android:textSize="20sp"

    android:gravity="center"

    android:textColor="#00ff00"/>

item2

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

  xmlns:tools="http://schemas.android.com/tools"

  android:id="@+id/activity_main"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  android:background="#f000ff"

  tools:context="baway.com.cj.myrecyclerview2.MainActivity">

  <TextView

    android:id="@+id/name"

    android:layout_width="match_parent"

    android:layout_height="50dp"

    android:textSize="20sp"

    android:gravity="center"

    android:textColor="#00ff00"/>

//activity,有上啦下拉,添加分割线,

packagebaway.com.cj.myrecyclerview2;

importandroid.graphics.Color;

importandroid.os.Handler;

importandroid.support.v4.widget.SwipeRefreshLayout;

importandroid.support.v7.app.AppCompatActivity;

importandroid.os.Bundle;

importandroid.support.v7.widget.DefaultItemAnimator;

importandroid.support.v7.widget.LinearLayoutManager;

importandroid.support.v7.widget.RecyclerView;

importandroid.util.Log;

importandroid.view.View;

importandroid.widget.ProgressBar;

importandroid.widget.Toast;

importjava.util.ArrayList;

publicclassMainActivityextendsAppCompatActivity {

  privateRecyclerView recyclerView;

  privateMainAdapter mainAdapter;

  privateSwipeRefreshLayout swipeRefreshLayout;

  privateLinearLayoutManager linearLayoutManager;

  privateProgressBar progress;

  @Override

  protectedvoidonCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    initView();

    initData();

  }

  privatevoidinitView() {

    recyclerView = (RecyclerView)findViewById(R.id.recyclerView);

    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);

    progress = (ProgressBar)findViewById(R.id.progress);

    linearLayoutManager =newLinearLayoutManager(this);

    recyclerView.setLayoutManager(linearLayoutManager);

    mainAdapter =newMainAdapter(this);

    mainAdapter.setOnClickListener(newMyItemOnClickListener() {

      @Override

      publicvoidonItemClick(View view,intposition) {

        Toast.makeText(MainActivity.this," "+position, Toast.LENGTH_SHORT).show();

      }

    });

    recyclerView.setAdapter(mainAdapter);

    recyclerView.addItemDecoration(newMyItemDecoration());

    recyclerView.setItemAnimator(newDefaultItemAnimator());

    swipeRefreshLayout.setColorSchemeColors(Color.RED,Color.GREEN,Color.BLUE);

    swipeRefreshLayout.setProgressViewOffset(true,0,200);

    swipeRefreshLayout.setOnRefreshListener(newSwipeRefreshLayout.OnRefreshListener() {

      @Override

      publicvoidonRefresh() {

        newHandler().postDelayed(newRunnable() {

          @Override

          publicvoidrun() {

            swipeRefreshLayout.setRefreshing(false);

          }

        },3000);

      }

    });

    recyclerView.addOnScrollListener(newRecyclerView.OnScrollListener() {

      @Override

      publicvoidonScrolled(RecyclerView recyclerView,intdx,intdy) {

        super.onScrolled(recyclerView, dx, dy);

        intlastVisibleItemPosition = linearLayoutManager.findLastVisibleItemPosition();

        intitemCount = linearLayoutManager.getItemCount();

        if(lastVisibleItemPosition +1>= itemCount && dy >0) {

          progress.setVisibility(View.VISIBLE);

          newHandler().postDelayed(newRunnable() {

            @Override

            publicvoidrun() {

              progress.setVisibility(View.GONE);

            }

          },3000);

        }

      }

      @Override

      publicvoidonScrollStateChanged(RecyclerView recyclerView,intnewState) {

        super.onScrollStateChanged(recyclerView, newState);

      }

    });

  }

  privatevoidinitData() {

    ArrayListstrings =newArrayList<>();

    for(inti =0; i<50; i++) {

      strings.add("name "+i);

    }

    mainAdapter.setData(strings);

    mainAdapter.notifyDataSetChanged();

  }

}

//adpter有多条目展示

packagebaway.com.cj.myrecyclerview2;

importandroid.content.Context;

importandroid.support.v7.widget.RecyclerView;

importandroid.view.LayoutInflater;

importandroid.view.View;

importandroid.view.ViewGroup;

importandroid.widget.TextView;

importjava.util.ArrayList;

/**

 * Created by cj on 2017/1/12.

 */

publicclassMainAdapterextendsRecyclerView.Adapter {

  privateContext context;

  privateArrayListdatas =newArrayList<>();

  privateMyItemOnClickListener myItemOnClickListener;

  privatefinalintTYPE_0 =0;

  privatefinalintTYPE_1 =1;

  publicMainAdapter(Context context) {

    this.context = context;

  }

  @Override

  publicintgetItemViewType(intposition) {

    if(position %3==0) {

      returnTYPE_0;

    }else{

      returnTYPE_1;

    }

  }

  publicvoidsetOnClickListener(MyItemOnClickListener onClickListener) {

    this.myItemOnClickListener = onClickListener;

  }

  @Override

  publicRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,intviewType) {

    if(viewType == TYPE_0) {

      View inflate = LayoutInflater.from(context).inflate(R.layout.item_main,null);

      returnnewMyViewHolder(inflate);

    }else{

      View inflate = LayoutInflater.from(context).inflate(R.layout.item_main2,null);

      returnnewMyViewHolder2(inflate);

    }

  }

  @Override

  publicvoidonBindViewHolder(RecyclerView.ViewHolder holder,finalintposition) {

    if(getItemViewType(position) == TYPE_0) {

      MyViewHolder myViewHolder = (MyViewHolder)holder;

      myViewHolder.name.setText(datas.get(position));

      myViewHolder.name.setOnClickListener(newView.OnClickListener() {

        @Override

        publicvoidonClick(View v) {

          myItemOnClickListener.onItemClick(v,position);

        }

      });

    }else{

      MyViewHolder2 myViewHolder = (MyViewHolder2)holder;

      myViewHolder.name.setText(datas.get(position));

      myViewHolder.name.setOnClickListener(newView.OnClickListener() {

        @Override

        publicvoidonClick(View v) {

          myItemOnClickListener.onItemClick(v,position);

        }

      });

    }

  }

  @Override

  publicintgetItemCount() {

    returndatas.size();

  }

  publicvoidsetData(ArrayListdata) {

    if(data ==null) {

      return;

    }

    this.datas.addAll(data);

  }

  publicclassMyViewHolderextendsRecyclerView.ViewHolder{

    publicTextView name;

    publicMyViewHolder(View itemView) {

      super(itemView);

      name = (TextView) itemView.findViewById(R.id.name);

    }

  }

  publicclassMyViewHolder2extendsRecyclerView.ViewHolder{

    publicTextView name;

    publicMyViewHolder2(View itemView) {

      super(itemView);

      name = (TextView) itemView.findViewById(R.id.name);

    }

  }

}

//自定义分割线继承系统的 RecyclerView.ItemDecoration

packagebaway.com.cj.myrecyclerview2;

importandroid.graphics.Canvas;

importandroid.graphics.Color;

importandroid.graphics.Paint;

importandroid.graphics.Rect;

importandroid.support.v7.widget.RecyclerView;

importandroid.util.Log;

importandroid.view.View;

/**

 * Created by cj on 2017/1/12.

 */

publicclassMyItemDecorationextendsRecyclerView.ItemDecoration {

  privatePaint paint;

  publicMyItemDecoration() {

    paint =newPaint();

    paint.setColor(Color.BLUE);

  }

  @Override

  publicvoidonDraw(Canvas c, RecyclerView parent, RecyclerView.State state) {

    super.onDraw(c, parent, state);

    //c.drawCircle(300,300,300,paint);

    intchildCount = parent.getChildCount();

    for(inti =0; i < childCount; i++) {

      View childAt = parent.getChildAt(i);

      c.drawRect(childAt.getLeft(),childAt.getBottom(),childAt.getWidth()+childAt.getLeft(),childAt.getBottom()+5,paint);

    }

  }

  @Override

  publicvoidonDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {

    super.onDrawOver(c, parent, state);

//    int childCount = parent.getChildCount();

//    for (int i = 0; i < childCount; i++) {

//      View childAt = parent.getChildAt(i);

//      c.drawRect(childAt.getLeft(),childAt.getTop(),childAt.getWidth()+childAt.getLeft(),childAt.getBottom()+5,paint);

//    }

  }

  @Override

  publicvoidgetItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

    super.getItemOffsets(outRect, view, parent, state);

    outRect.set(20,0,20,5);

  }

}

 

[!--infotagslink--]

相关文章

  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • Android开发中findViewById()函数用法与简化

    findViewById方法在android开发中是获取页面控件的值了,有没有发现我们一个页面控件多了会反复研究写findViewById呢,下面我们一起来看它的简化方法。 Android中Fin...2016-09-20
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • Android模拟器上模拟来电和短信配置

    如果我们的项目需要做来电及短信的功能,那么我们就得在Android模拟器开发这些功能,本来就来告诉我们如何在Android模拟器上模拟来电及来短信的功能。 在Android模拟...2016-09-20
  • 夜神android模拟器设置代理的方法

    夜神android模拟器如何设置代理呢?对于这个问题其实操作起来是非常的简单,下面小编来为各位详细介绍夜神android模拟器设置代理的方法,希望例子能够帮助到各位。 app...2016-09-20
  • android自定义动态设置Button样式【很常用】

    为了增强android应用的用户体验,我们可以在一些Button按钮上自定义动态的设置一些样式,比如交互时改变字体、颜色、背景图等。 今天来看一个通过重写Button来动态实...2016-09-20
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • Android WebView加载html5页面实例教程

    如果我们要在Android应用APP中加载html5页面,我们可以使用WebView,本文我们分享两个WebView加载html5页面实例应用。 实例一:WebView加载html5实现炫酷引导页面大多...2016-09-20
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • 深入理解Android中View和ViewGroup

    深入理解Android中View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。本教程我们深...2016-09-20
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02