RecyclerView显示不同的类型的item
2016-07-01 17:08
369 查看
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}* <p/>* 更新者 $Author$* 更新时间 $Date$* 更新描述 ${TODO}*/public class Theme1ContentFragment extends Fragment {private static final String TAG = "Theme1ContentFragment";private LinearLayout llcontxtmain;private Context mContext;private List<View> mAllViewList;private RecyclerViewTV mRl_home;private List<Integer> mMoreImgList;public Theme1ContentFragment(Context context) {mContext = context;}@Overridepublic 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;}@Overridepublic 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<View> viewList = getAllView(llcontxtmain);for (View itemView : viewList) {itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic 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<View> 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<RecyclerView.ViewHolder> {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); } }@Overridepublic 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); } }}}
相关文章推荐
- MYSQL中 TYPE=MyISAM 错误的解决方法
- PHP中的类型提示(type hinting)功能介绍
- C#实现让ListBox适应最大Item宽度的方法
- TypeScript Type Innference(类型判断)
- 拖动Html元素集合 Drag and Drop any item
- jQuery动态添加<input type="file">
- jquery.post用法之type设置问题
- script标签属性type与language使用选择
- js 获取、清空input type="file"的值示例代码
- Android实现取消GridView中Item选中时默认的背景色
- Delphi实现Listbox中的item根据内容显示不同颜色的方法
- js清除input中type等于file的值域(示例代码)
- js动态修改input输入框的type属性(实现方法解析)
- ie8下修改input的type属性报错的解决方法
- RecyclerView的使用之多种Item加载布局
- Android中RecyclerView布局代替GridView实现类似支付宝的界面
- Android开发之ListView实现Item局部刷新
- 深入解析Android中的RecyclerView组件
- Android App开发中使用RecyclerView实现Gallery画廊的实例
- AndroidStudio无法引用RecyclerView