您的位置:首页 > 其它

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);
}
}}} 

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息