复杂RecyclerView实现

在很多时候会用到RecyclerView加载不同类型的布局,今天用两种不同的方式去实现。

主要写了7个类,四个和ViewHolder相关类,一个数据模型DataModel,一个DataAdapter,一个MainActivity,具体实现我会把代码详细写出来

MainActivity.java

package com.hongxin.recyclerview;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;

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

public class MainActivity extends AppCompatActivity {

    private RecyclerView mRecyclerView;
    private DataAdapter mAdapter;
    int colors[]= {android.R.color.holo_blue_dark, android.R.color.holo_orange_dark, android.R.color.holo_red_dark};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mRecyclerView= (RecyclerView) findViewById(R.id.recyclerview);
//        mRecyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL,false));
        mRecyclerView.setLayoutManager(new GridLayoutManager(this,2));
        mAdapter=new DataAdapter(this);
        mRecyclerView.setAdapter(mAdapter);

        initData();
    }

    private void initData() {
        List<DataModel> list=new ArrayList<>();
        for(int i=0;i<40;i++){

            int type= (int) ((Math.random()*3)+1);
            DataModel data=new DataModel();
            data.avatarColor=colors[type-1];
            data.type=type;
            data.content="content:"+i;
            data.name="name:"+i;
            data.contentColor=colors[(type+1)%3];
            list.add(data);
        }
        mAdapter.addList(list);
        mAdapter.notifyDataSetChanged();
    }
}
 
 
DataModel.java
public class DataModel {

    public static final int TYPE_ONE=1;
    public static final int TYPE_TWO=2;
    public static final int TYPE_THREE=3;

    public int type;
    public int avatarColor;
    public int contentColor;
    public String name;
    public String content;

}
DataAdapter.java
 
 
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.ViewGroup;

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


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

    private LayoutInflater mInflater;
    private List<DataModel> mList=new ArrayList<>();
    public DataAdapter(Context context) {

        mInflater=LayoutInflater.from(context);
    }

    public void addList(List<DataModel> list){
        mList.addAll(list);
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType){
            case DataModel.TYPE_ONE:
                return new TypeOneViewHolder(mInflater.inflate(R.layout.item_type_one,parent,false));
            case DataModel.TYPE_TWO:
                return new TypeTwoViewHolder(mInflater.inflate(R.layout.item_type_two,parent,false));
            case DataModel.TYPE_THREE:
                return new TypeThreeViewHolder(mInflater.inflate(R.layout.item_type_three,parent,false));

        }

        return null;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        int viewType=getItemViewType(position);
        ((TypeAbstractViewHolder)holder).bindHolder(mList.get(position));


    }

    @Override
    public int getItemViewType(int position) {
        return mList.get(position).type;
    }

    @Override
    public int getItemCount() {
            return mList.size();
    }
}
 
 
TypeAbstractViewHolder.java
 
 
public abstract class TypeAbstractViewHolder extends RecyclerView.ViewHolder {

    public TypeAbstractViewHolder(View itemView) {
        super(itemView);
    }

    public abstract void bindHolder(DataModel model);
}
 
 
TypeOneViewHolder.java
 
 
public class TypeOneViewHolder extends TypeAbstractViewHolder {
    private ImageView avatar;
    private TextView name;

    public TypeOneViewHolder(View itemView) {
        super(itemView);
        avatar= (ImageView) itemView.findViewById(R.id.avatar);
        name= (TextView) itemView.findViewById(R.id.name);

    }
    @Override
    public void bindHolder(DataModel model){
        avatar.setBackgroundResource(model.avatarColor);
        name.setText(model.name);
    }
}
TypeTwoViewHolder.java
 
 
public class TypeTwoViewHolder extends TypeAbstractViewHolder {
    private ImageView avatar;
    private TextView name;
    private TextView content;

    public TypeTwoViewHolder(View itemView) {
        super(itemView);
        avatar= (ImageView) itemView.findViewById(R.id.avatar);
        name= (TextView) itemView.findViewById(R.id.name);
        content= (TextView) itemView.findViewById(R.id.content);

    }
    @Override
    public void bindHolder(DataModel model){
        avatar.setBackgroundResource(model.avatarColor);
        name.setText(model.name);
        content.setText(model.content);
    }
}
TypeThreeViewHolder.java
 
 
 
 
public class TypeThreeViewHolder extends TypeAbstractViewHolder {
    private ImageView avatar;
    private TextView name;
    private TextView content;
    private ImageView contentImage;

    public TypeThreeViewHolder(View itemView) {
        super(itemView);
        avatar= (ImageView) itemView.findViewById(R.id.avatar);
        name= (TextView) itemView.findViewById(R.id.name);
        content= (TextView) itemView.findViewById(R.id.content);
        contentImage= (ImageView) itemView.findViewById(R.id.contentImage);

    }
    @Override
    public void bindHolder(DataModel model){
        avatar.setBackgroundResource(model.avatarColor);
        name.setText(model.name);
        content.setText(model.content);
        contentImage.setBackgroundResource(model.contentColor);
    }
}
源码地址http://download.csdn.net/detail/qq_35114086/9829458


猜你喜欢

转载自blog.csdn.net/qq_35114086/article/details/70991729
今日推荐