RecyclerView显示不同的类型的item



1 .复写RecyclerView的Adapter中的getItemViewType 方法


@Override
public int getItemViewType(int position) {
    if (position == 0) {
        return ITEM_TYEP_2;  //左边的

    } else {
        return ITEM_TYEP_1;  //更多
    }

}

定义要显示的item类型常量

public static final int ITEM_TYEP_1 = 1;  //
public static final int ITEM_TYEP_2 = 2;

2.在onCreateViewHolder 方法中 对item显示数据的类型进行判断 根据item 的类型返回不同的ViewHolder


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

    if (viewType == ITEM_TYEP_1) {
        return new MyViewHolder(layoutInflater.inflate(R.layout.item_home_more, parent, false));

    } else {
        return new LeftContentViewHolder(layoutInflater.inflate(R.layout.item_home_left, parent, false));
    }

}

3.现在在不同的ViewHolder 中获取控件


class MyViewHolder extends RecyclerView.ViewHolder {
    TvImageView more_item_top;
    TvImageView more_item_bottom;

    public MyViewHolder(View itemView) {
        super(itemView);
        more_item_top = (TvImageView) itemView.findViewById(R.id.iv_home_more_top);
        more_item_bottom = (TvImageView) itemView.findViewById(R.id.iv_home_more_bottom);
    }
}

/**
 * 左边的ViewHolder
 */
class LeftContentViewHolder extends RecyclerView.ViewHolder {
    LinearLayout ll_left;

    public LeftContentViewHolder(View itemView) {
        super(itemView);

        ll_left = (LinearLayout) itemView.findViewById(R.id.ll_home_left);
    }
}

4 . 在onBindViewHolder 中判断ViewHolder 的类型,进行视图和数据的绑定



@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    if (holder instanceof MyViewHolder) {
        ((MyViewHolder) holder).more_item_top.setImageResource(mMoreImgList.get(position));
        ((MyViewHolder) holder).more_item_bottom.setImageResource(mMoreImgList.get(position));

    } else {

      //  ((LeftContentViewHolder) holder).letf_imageView.setImageResource(R.drawable.theme1_main_02);
    }

}

下面完整代码


package com.dy.stylepackage0614_a.fragment;

import android.app.Fragment;
import android.content.Context;
import android.os.Bundle;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

import com.dy.stylepackage0614_a.R;

import org.evilbinary.tv.widget.RecyclerViewTV;
import org.evilbinary.tv.widget.TvImageView;

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

/**
 * 创建者     demo
 * 创建时间   2016/6/7 14:35
 * 描述        ${TODO}
 * 

* 更新者 $Author$ * 更新时间 $Date$ * 更新描述 ${TODO} */ public class Theme1ContentFragment extends Fragment { private static final String TAG = "Theme1ContentFragment"; private LinearLayout llcontxtmain; private Context mContext; private List mAllViewList; private RecyclerViewTV mRl_home; private List mMoreImgList; public Theme1ContentFragment(Context context) { mContext = context; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return initView(inflater, container); } private View initView(LayoutInflater inflater, ViewGroup container) { View view = inflater.inflate(R.layout.fragment_home_content, container, false); mRl_home = (RecyclerViewTV) view.findViewById(R.id.recyclerview_home); initViewClick(view); //控件的点击事件 return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initData(); initEvent(); } private void initViewClick(View root) { llcontxtmain = (LinearLayout) root.findViewById(R.id.ll_contxt_main); mAllViewList = new ArrayList<>(); List viewList = getAllView(llcontxtmain); for (View itemView : viewList) { itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d(TAG, "点击了控件" + v.getId()); } }); } } private void initEvent() { } private void initData() { mMoreImgList = new ArrayList<>(); for (int i = 0; i < 20; i++) { mMoreImgList.add(R.drawable.theme1_main_04); } LinearLayoutManager manager = new LinearLayoutManager(mContext); manager.setOrientation(LinearLayoutManager.HORIZONTAL); mRl_home.setLayoutManager(manager); MoreContentAdapter contentAdapter = new MoreContentAdapter(); mRl_home.setAdapter(contentAdapter); } /** * 获取所有的子控件 * * @param parent * @return mAllViewList */ private List getAllView(ViewGroup parent) { for (int i = 0; i < parent.getChildCount(); i++) { if (parent.getChildAt(i) instanceof ViewGroup) { getAllView((ViewGroup) parent.getChildAt(i)); } else { mAllViewList.add(parent.getChildAt(i)); } } return mAllViewList; } /** * 跟多类容的adapter */ private class MoreContentAdapter extends RecyclerView.Adapter { public static final int ITEM_TYEP_1 = 1; // public static final int ITEM_TYEP_2 = 2; LayoutInflater layoutInflater; public MoreContentAdapter() { layoutInflater = LayoutInflater.from(mContext); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == ITEM_TYEP_1) { return new MyViewHolder(layoutInflater.inflate(R.layout.item_home_more, parent, false)); } else { return new LeftContentViewHolder(layoutInflater.inflate(R.layout.item_home_left, parent, false)); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { if (holder instanceof MyViewHolder) { ((MyViewHolder) holder).more_item_top.setImageResource(mMoreImgList.get(position)); ((MyViewHolder) holder).more_item_bottom.setImageResource(mMoreImgList.get(position)); } else { // ((LeftContentViewHolder) holder).letf_imageView.setImageResource(R.drawable.theme1_main_02); } } @Override public int getItemCount() { return mMoreImgList.size(); } @Override public int getItemViewType(int position) { if (position == 0) { return ITEM_TYEP_2; //左边的 } else { return ITEM_TYEP_1; //更多 } } class MyViewHolder extends RecyclerView.ViewHolder { TvImageView more_item_top; TvImageView more_item_bottom; public MyViewHolder(View itemView) { super(itemView); more_item_top = (TvImageView) itemView.findViewById(R.id.iv_home_more_top); more_item_bottom = (TvImageView) itemView.findViewById(R.id.iv_home_more_bottom); } } /** * 左边的ViewHolder */ class LeftContentViewHolder extends RecyclerView.ViewHolder { LinearLayout ll_left; public LeftContentViewHolder(View itemView) { super(itemView); ll_left = (LinearLayout) itemView.findViewById(R.id.ll_home_left); } } } }



你可能感兴趣的:(RecyclerView显示不同的类型的item)