Android使用RecyclerView和StaggeredGridLayoutManager实现瀑布流效果-空实现

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/sinat_25074703/article/details/82959963

5、实现RecyclerView的适配器StaggeredAdapter

recyclerView的Adapter是完成数据缓存和装载功能的。官方解释如下:

Adapters provide a binding from an app-specific data set to views that are displayed within a {@link RecyclerView}.

翻译如下:适配器提供了一种绑定,把app指定的数据设置给显示在RecyclerView内将要被显示的view上。
我们可以知道,adapter主要完成规定数据和itemView的绑定逻辑。
RecyclerView.Adapter是一个抽象类,StaggeredAdapter继承该类必须实现getItemCount()、onCreateViewHolder(ViewGroup parent, int viewType)、onBindViewHolder(VH holder, int position)三个抽象方法

  1. getItemCount();

Returns the total number of items in the data set held by the adapter.
翻译:返回adapter的所有item数,不分类型

  1. onCreateViewHolder(ViewGroup parent, int viewType);

Called when RecyclerView needs a new {@link ViewHolder} of the given
type to represent an item.
@return A new ViewHolder that holds a View of the given view type.
翻译:当recyclerview需要一个新的ViewHolder时调用,这个ViewHolder是与指定类型的item一一对应的。
返回一个指定view 类型的ViewHolder
可见,不同的ViewType对应不同的ViewHolder,ViewType是int值。也就是说,我们可以定义多个整数代表不同的ViewType,定义不同的ViewHolder展示不同的item

  • @see #getItemViewType(int)
  • @see #onBindViewHolder(ViewHolder, int)
  1. getItemViewType(int position)

Return the view type of the item at position for the purposes of view recycling.
翻译:返回position处的ViewType,以便视图回收
有了ItemViewType,在onCreateViewHolder中自然可以创建对应的ViewHolder

  1. onBindViewHolder(VH holder, int position);

Called by RecyclerView to display the data at the specified
position. This method should update the contents of the {@link
ViewHolder#itemView} to reflect the item at the given position.
翻译:RecyclerView在指定位置显示数据时调用,用于更新ViewHolder持有的指定的某个itemView
通过以上分析可以知道,adapter通过getItemCount()方法获得item数,通过getItemViewType()获取每个位置的item对应的item类型,onCreateViewHolder()根据itemType创建ViewHolder为初始状态,说白了就是装载布局文件。最后onBindViewHolder()完成更新。
StaggeredAdapter.java代码如下:

package com.edwin.idea.staggered;

import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.util.Log;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Edwin,CHEN on 2018/9/18.
 */

public class StaggeredAdapter extends RecyclerView.Adapter {

    private static final String TAG = StaggeredAdapter.class.getSimpleName();

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Log.d(TAG, "======onCreateViewHolder");
        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {
        Log.d(TAG, "======onBindViewHolder");
    }

    @Override
    public int getItemCount() {
        Log.d(TAG, "=====getItemCount");
        return 0;
    }

    @Override
    public int getItemViewType(int position) {
        Log.d(TAG, "===getItemViewType");
        return super.getItemViewType(position);
    }
}

为了验证以上四个方法的执行顺序,将StaggeredAdapter设置给RecyclerView,在StaggeredFragment中做如下处理:

package com.edwin.idea.staggered;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.edwin.idea.AbstractFragment;
import com.edwin.idea.R;

/**
 * Created by Edwin,CHEN on 2018/9/18.
 */

public class StaggeredFragment extends AbstractFragment {

    ViewGroup viewGroupRoot;
    
    RecyclerView recyclerView;
    StaggeredGridLayoutManager staggeredGridLayoutManager; 
    StaggeredAdapter staggeredAdapter;

    public static Fragment newInstance(){
        return new StaggeredFragment();
    }

    @Nullable
    @Overrid
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值