Spring实现上拉刷新和下拉加载效果

本文实例为大家分享了Spring实现上拉刷新和下拉加载效果,供大家参考,具体内容如下

导依赖:

compile 'com.android.support:recyclerview-v7:25.3.1'
compile 'com.liaoinstan.springview:library:1.3.0'
compile files('libs/glide-3.7.0.jar') 

activity_main布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
   android:orientation="vertical"
  tools:context="muhanxi.recycleview.MainActivity"> 

  <com.liaoinstan.springview.widget.SpringView
    android:layout_width="match_parent"
    android:id="@+id/springview"
    android:layout_height="match_parent"> 

    <android.support.v7.widget.RecyclerView
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:id="@+id/recyclerview"/> 

  </com.liaoinstan.springview.widget.SpringView> 

</LinearLayout>

MainActivity 主类

public class MainActivity extends Activity { 

  private RecyclerView recyclerView;
  private List<String> list = new ArrayList<>();
  private SpringView springView;
  private LinearLayoutManager linearLayoutManager; 

  @RequiresApi(api = Build.VERSION_CODES.GINGERBREAD)
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main); 

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

    list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
    list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
    list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
    list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
    list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
    list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
    list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg"); 

    list.add("http://f10.baidu.com/it/u=2881303562,336932824&fm=72");
    list.add("http://f11.baidu.com/it/u=681755471,2018070071&fm=72");
    list.add("http://f10.baidu.com/it/u=960650584,863938083&fm=72");
    list.add("http://img0.imgtn.bdimg.com/it/u=783060973,4278100629&fm=27&gp=0.jpg");
    list.add("http://img1.imgtn.bdimg.com/it/u=3743124979,3234956668&fm=27&gp=0.jpg");
    list.add("http://img4.imgtn.bdimg.com/it/u=3468613159,957707785&fm=27&gp=0.jpg");
    list.add("http://img3.imgtn.bdimg.com/it/u=2971205354,485034289&fm=27&gp=0.jpg"); 

    // 设置布局管理器
//    new GridLayoutManager() 九宫格布局管理器
//    new LinearLayoutManager() listview 布局管理器
//
//    new StaggeredGridLayoutManager() 瀑布流 布局管理器 

//    recyclerView.setLayoutManager(new GridLayoutManager(this,5)); 

//    recyclerView.setLayoutManager(new StaggeredGridLayoutManager(3, LinearLayout.VERTICAL));
//    RecyclerViewAdapter adapter = new RecyclerViewAdapter(this,list) ; 

    MultiAdapter adapter = new MultiAdapter(this,list) ; 

    linearLayoutManager = new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false);
    recyclerView.setLayoutManager(linearLayoutManager);
    recyclerView.setAdapter(adapter);
//
//    adapter.setIListener(new RecyclerViewAdapter.Listener() {
//      @Override
//      public void onClick(View view, int position) {
//        Toast.makeText(MainActivity.this, ""+position, Toast.LENGTH_SHORT).show();
//      }
//
//      @Override
//      public void longClick(View view, int position) {
//
//      }
//    }); 

    recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
      @Override
      public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
        super.onScrollStateChanged(recyclerView, newState); 

//        linearLayoutManager.findFirstVisibleItemPosition() 

      } 

      @Override
      public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);
      }
    }); 

//    recyclerView.setOnI 

//    recyclerView.addItemDecoration(new HorizontalDividerItemDecoration.Builder(this)
//    .color(Color.RED).build()); 

    springView = (SpringView) findViewById(R.id.springview); 

    springView.setHeader(new DefaultHeader(this));
    springView.setFooter(new DefaultFooter(this)); 

    springView.setListener(new SpringView.OnFreshListener() {
      @Override
      public void onRefresh() {
        //下啦 

        springView.onFinishFreshAndLoad();
      } 

      @Override
      public void onLoadmore() {
// 上啦
        springView.onFinishFreshAndLoad(); 

      }
    }); 

//    adapter.notifyDataSetChanged(); 

  } 

}

下拉布局

<?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="wrap_content"
  android:gravity="center"
  android:orientation="vertical"> 

  <ImageView
    android:src="@mipmap/ic_launcher"
    android:scaleType="centerCrop"
    android:id="@+id/item_simageview"
    android:layout_width="match_parent"
    android:layout_height="100dp" /> 

</LinearLayout>

刷新布局

<?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="wrap_content"
  android:gravity="center"
  android:orientation="vertical"> 

  <ImageView
    android:src="@mipmap/ic_launcher"
    android:id="@+id/item_simageview"
    android:layout_width="match_parent"
    android:layout_height="100dp" /> 

  <TextView 

    android:background="@color/colorPrimary"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/item_stextview"/> 

</LinearLayout>

MultiAdapter 适配器

public class MultiAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { 

  private Context context;
  private List<String> list; 

  public MultiAdapter(Context context, List<String> list) {
    this.context = context;
    this.list = list; 

  } 

  @Override
  public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    if (viewType == 0) { 

      View view = LayoutInflater.from(context).inflate(R.layout.layout_fitem,parent, false);
      return new FViewHolder(view); 

    } else {
      View view = LayoutInflater.from(context).inflate(R.layout.layout_sitem, parent, false); 

      return new SViewHolder(view); 

    } 

  } 

  @Override
  public int getItemViewType(int position) {
    return position % 2 ;
  } 

  @Override
  public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 

    if(holder instanceof FViewHolder){ 

      FViewHolder fViewHolder = (FViewHolder)holder ;
      fViewHolder.itemStextview.setText(position+"");
      Glide.with(context).load(list.get(position)).into(fViewHolder.itemSimageview); 

//      ImageLoader.getInstance().displayImage(list.get(position),fViewHolder.itemSimageview); 

    } else { 

      SViewHolder sViewHolder = (SViewHolder)holder ;
      Glide.with(context).load(list.get(position)).into(sViewHolder.itemSimageview); 

//      ImageLoader.getInstance().displayImage(list.get(position),sViewHolder.itemSimageview); 

    } 

  } 

  @Override
  public int getItemCount() {
    return list.size();
  } 

  static class FViewHolder extends RecyclerView.ViewHolder{
    @BindView(R.id.item_simageview)
    ImageView itemSimageview;
    @BindView(R.id.item_stextview)
    TextView itemStextview; 

    FViewHolder(View view) {
      super(view);
      ButterKnife.bind(this, view);
    }
  } 

  class SViewHolder extends RecyclerView.ViewHolder{
    @BindView(R.id.item_simageview)
    ImageView itemSimageview; 

    SViewHolder(View view) {
      super(view);
      ButterKnife.bind(this, view);
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Spring加载properties文件的方法
  • SpringMVC结合ajaxfileupload.js实现文件无刷新上传
  • 详解SpringMVC加载配置Properties文件的几种方式
  • SpringBoot加载静态资源的方式
  • 详解Spring Boot加载properties和yml配置文件
  • SpringMVC结合ajaxfileupload实现文件无刷新上传代码
  • Spring Boot 启动加载数据 CommandLineRunner的使用
  • spring boot中的静态资源加载处理方式
  • Spring多种加载Bean方式解析
  • 详解Spring简单容器中的Bean基本加载过程
(0)

相关推荐

  • Spring加载properties文件的方法

    在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可,不需要修改源代码,这样更加方便.在Spring中也可以这么做,而且Spring有两种加载properties文件的方式:基于xml方式和基于注解方式. 下面分别讨论下这两种方式. 1. 通过xml方式加载properties文件         我们以Spring实例化dataSource为例,我们

  • SpringMVC结合ajaxfileupload.js实现文件无刷新上传

    直接看代码吧,注释都在里面 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLoc

  • 详解Spring简单容器中的Bean基本加载过程

    本篇将对定义在 XMl 文件中的 bean,从静态的的定义到变成可以使用的对象的过程,即 bean 的加载和获取的过程进行一个整体的了解,不去深究,点到为止,只求对 Spring IOC 的实现过程有一个整体的感知,具体实现细节留到后面用针对性的篇章进行讲解. 首先我们来引入一个 Spring 入门使用示例,假设我们现在定义了一个类 org.zhenchao.framework.MyBean ,我们希望利用 Spring 来管理类对象,这里我们利用 Spring 经典的 XMl 配置文件形式进行

  • 详解SpringMVC加载配置Properties文件的几种方式

    最近开发的项目使用了SpringMVC的框架,用下来感觉SpringMVC的代码实现的非常优雅,功能也非常强大, 网上介绍Controller参数绑定.URL映射的文章都很多了,写这篇博客主要总结一下SpringMVC加载配置Properties文件的几种方式 1.通过context:property-placeholde实现配置文件加载 1.1.在spring.xml中加入context相关引用 <?xml version="1.0" encoding="UTF-8&

  • Spring Boot 启动加载数据 CommandLineRunner的使用

    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求. 为了解决这样的问题,spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner 来实现. 很简单,只需要一个类就可以,无需其他配置. 创建实现接口 CommandLineRunner 的类 package org.springboot.sample.runner; import org.springframework.boot.CommandLineRunner; import

  • SpringBoot加载静态资源的方式

    在SpringBoot中加载静态资源和在普通的web应用中不太一样.默认情况下,spring Boot从classpath下一个叫/static(/public,/resources或/META-INF/resources)的文件夹或从ServletContext根目录提供静态内容.下面我们来写个例子看一下就会一目了然了:首先看一下项目的目录结构: 我们在resources下面的templates目录下建一个home.html的文件,完整目录为:src/main/resources/templa

  • SpringMVC结合ajaxfileupload实现文件无刷新上传代码

    jQuery没有提供ajax的文件上传,我们可以通过ajaxfileupload实现ajax文件的上传.其实ajaxfileupload文件上传特别的简单.下面就演示一下在SpringMVC中实现ajax的文件上传. 1.后台接收代码 首先在spring的配置文件中添加文件上传配置 <!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commo

  • Spring多种加载Bean方式解析

    1 定义bean的方式 常见的定义Bean的方式有: 通过xml的方式,例如: <bean id="dictionaryRelMap" class="java.util.HashMap"/> 通过注解的方式,在Class上使用@Component等注解,例如 @Component public class xxxServicer{ .... } 通过在@Configuration类下的@Bean的方式,例如 @Configuration public c

  • 详解Spring Boot加载properties和yml配置文件

    一.系统启动后注入配置 package com.example.config; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import org.springframewo

  • spring boot中的静态资源加载处理方式

    1.spring boot默认资源处理 Spring Boot 默认为我们提供了静态资源处理,使用 WebMvcAutoConfiguration 中的配置各种属性. spring boot默认加载文件的路径是: /META-INF/resources/ /resources/ /static/ /public/ 这些目录下面, 当然我们也可以从spring boot源码也可以看到Java代码: private static final String[] CLASSPATH_RESOURCE_L

随机推荐