1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Android recyclerView实现二级横向显示

Android recyclerView实现二级横向显示

时间:2018-11-06 22:12:18

相关推荐

Android recyclerView实现二级横向显示

1、效果图

2、主要实现比较简单,首先data数据类

package com.example.mytestproject.recycle;import java.io.Serializable;import java.util.List;public class RecyclerItem implements Serializable {private int icon;private String name;private List<Integer> iconList;public int getIcon() {return icon;}public void setIcon(int icon) {this.icon = icon;}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<Integer> getIconList() {return iconList;}public void setIconList(List<Integer> iconList) {this.iconList = iconList;}}

3、这里随意加载一些数据、和设置recyclerView横向显示

mRecyclerView = findViewById(R.id.recyclerView);mAdapter = new HotelEntityAdapter(this);LinearLayoutManager layoutManager=new LinearLayoutManager(this);layoutManager.setOrientation(RecyclerView.HORIZONTAL);//设置header// manager.setSpanSizeLookup(new SectionedSpanSizeLookup(mAdapter,manager));mRecyclerView.setLayoutManager(layoutManager);mRecyclerView.setAdapter(mAdapter);for (int i=0;i<15;i++){mIconList.add(R.mipmap.item);}for (int i=0;i<5;i++){RecyclerItem recyclerItem = new RecyclerItem();recyclerItem.setIcon(R.mipmap.title);recyclerItem.setIconList(mIconList);mItemList.add(recyclerItem);}mAdapter.setData(mItemList);mAdapter.setOnItemClick(new HotelEntityAdapter.OnItemClickListener() {@Overridepublic void onItemClick(int section, int position) {Toast.makeText(RecyclerActivity.this,section+"=="+position,Toast.LENGTH_SHORT).show();}});

4、adapter的实现,传入数据后、加载两个布局显示、然后接口回调点击事件,代码比较简单。

package com.example.mytestproject.recycle;import android.content.Context;import android.util.SparseBooleanArray;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import androidx.recyclerview.widget.RecyclerView;import com.example.mytestproject.R;import java.util.List;public class HotelEntityAdapter extends SectionedRecyclerViewAdapter<HeaderHolder, DescHolder, RecyclerView.ViewHolder> {public List<RecyclerItem> mRecyclerItemList;private Context mContext;private LayoutInflater mInflater;private SparseBooleanArray mBooleanMap;public HotelEntityAdapter(Context context) {mContext = context;mInflater = LayoutInflater.from(context);mBooleanMap = new SparseBooleanArray();}public void setData(List<RecyclerItem> allTagList) {this.mRecyclerItemList = allTagList;mBooleanMap.put(0, true);notifyDataSetChanged();}protected int getSectionCount() {int count = 0;if (mRecyclerItemList != null) {count = mRecyclerItemList.size();}return count;}@Overrideprotected int getItemCountForSection(int section) {int count = mRecyclerItemList.get(section).getIconList().size();if (count >= 1 && !mBooleanMap.get(section)) {count = 0;}if (section == 0 && mBooleanMap.get(section)) {count = mRecyclerItemList.get(section).getIconList().size();}return HotelUtils.isEmpty(mRecyclerItemList.get(section).getIconList()) ? 0 : count;}//是否有footer布局/*** 判断是否需要底部footer布局,在该例中,我们并不需要显示footer,所以默认返回false就可以,* 如果你对应的section需要展示footer布局,那么就在对应的section返回true就行了** @param section* @return*/@Overrideprotected boolean hasFooterInSection(int section) {return false;}@Overrideprotected HeaderHolder onCreateSectionHeaderViewHolder(ViewGroup parent, int viewType) {return new HeaderHolder(mInflater.inflate(R.layout.hotel_title_item, parent, false));}@Overrideprotected RecyclerView.ViewHolder onCreateSectionFooterViewHolder(ViewGroup parent, int viewType) {return null;}@Overrideprotected DescHolder onCreateItemViewHolder(ViewGroup parent, int viewType) {return new DescHolder(mInflater.inflate(R.layout.hotel_desc_item, parent, false));}@Overrideprotected void onBindSectionHeaderViewHolder(final HeaderHolder holder, final int section) {holder.titleView.setText(mRecyclerItemList.get(section).getName());holder.openView.setImageResource(mRecyclerItemList.get(section).getIcon());holder.llHotel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {boolean isOpen = mBooleanMap.get(section);mBooleanMap.put(section, !isOpen);notifyDataSetChanged();}});}@Overrideprotected void onBindSectionFooterViewHolder(RecyclerView.ViewHolder holder, int section) {}/*** @param holder* @param section* @param position*/@Overrideprotected void onBindItemViewHolder(DescHolder holder, final int section, final int position) {holder.descView.setImageResource(mRecyclerItemList.get(section).getIconList().get(position));holder.descView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {if (onItemClickListener != null) {onItemClickListener.onItemClick(section, position);}}});}private OnItemClickListener onItemClickListener;public void setOnItemClick(OnItemClickListener listener) {this.onItemClickListener = listener;}public interface OnItemClickListener {void onItemClick(int section, int position);}}

5、两个holder的代码主要就是一个图片显示,实现都是比较简单的。

package com.example.mytestproject.recycle;import android.view.View;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import androidx.recyclerview.widget.RecyclerView;import com.example.mytestproject.R;public class HeaderHolder extends RecyclerView.ViewHolder {public TextView titleView;public ImageView openView;public LinearLayout llHotel;public HeaderHolder(View itemView) {super(itemView);initView();}private void initView() {titleView = (TextView) itemView.findViewById(R.id.tv_title);openView = (ImageView) itemView.findViewById(R.id.tv_icon);llHotel = itemView.findViewById(R.id.ll_hotel);}}

package com.example.mytestproject.recycle;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import androidx.recyclerview.widget.RecyclerView;import com.example.mytestproject.R;public class DescHolder extends RecyclerView.ViewHolder {public ImageView descView;public DescHolder(View itemView) {super(itemView);initView();}private void initView() {descView = (ImageView) itemView.findViewById(R.id.iv_icon);}}

这个主要是参考网上的一个二级页面稍作修改得来、想看具体实现代码可以自己下载/download/u011324501/12615856,demo实现比较简单、里面还有自由绘图跟一个用户各种数据缓存的类。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。