通过Flexbox实现流式布局,效果:
![](https://img-blog.csdnimg.cn/img_convert/b31da5922426f089ec58c4026591902a.png)
RecyclerView结合FlexboxLayoutManager实现流式布局
FlexboxLayoutManager manager=new FlexboxLayoutManager(getContext());
//设置主轴排列形式
manager.setFlexDirection(FlexDirection.ROW);
//设置是否换行
manager.setFlexWrap(FlexWrap.WRAP);
binding.navRv.setLayoutManager(manager);
navListAdapter = new NavListAdapter(navResponseList,getContext());
binding.navRv.setAdapter(navListAdapter);
通过getItemViewType重写,实现RecyclerView二级列表展示,根据type区分不同View展示数据
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.databinding.DataBindingUtil;
import androidx.recyclerview.widget.RecyclerView;
import com.jetpack.demo.R;
import com.jetpack.demo.databinding.NavItemBinding;
import com.jetpack.demo.databinding.NavSuperItemBinding;
import com.jetpack.demo.databinding.TopItemBinding;
import com.jetpack.demo.model.home.TopResponse;
import com.jetpack.demo.model.nav.NavResponse;
public class NavListAdapter extends RecyclerView.Adapter {
private List<NavResponse.Articles> navResponses;
private Context mContext;
private int TYPE_SUPER = 0;
private int TYPE_CHILD = 1;
public NavListAdapter(List<NavResponse.Articles> navResponses, Context mContext) {
this.navResponses = navResponses;
this.mContext = mContext;
}
@NonNull
@NotNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull @NotNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mContext);
if (viewType == TYPE_CHILD){
NavItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.nav_item,parent,false);
return new MyViewHolder(binding.getRoot());
}else {
NavSuperItemBinding binding = DataBindingUtil.inflate(inflater, R.layout.nav_super_item,parent,false);
return new MyViewHolder(binding.getRoot());
}
}
@Override
public void onBindViewHolder(@NonNull @NotNull RecyclerView.ViewHolder holder, int position) {
NavResponse.Articles articles = navResponses.get(position);
if (articles.chapterName == null){
NavSuperItemBinding binding = DataBindingUtil.getBinding(holder.itemView);
binding.tvNav.setText(navResponses.get(position).title);
binding.executePendingBindings();
}else {
NavItemBinding binding = DataBindingUtil.getBinding(holder.itemView);
binding.tvNav.setText(navResponses.get(position).title);
binding.executePendingBindings();
}
}
@Override
public int getItemViewType(int position) {
NavResponse.Articles articles = navResponses.get(position);
return articles.chapterName == null?TYPE_SUPER:TYPE_CHILD;
}
@Override
public int getItemCount() {
return navResponses.size();
}
class MyViewHolder extends RecyclerView.ViewHolder{
public MyViewHolder(@NonNull @NotNull View itemView) {
super(itemView);
}
}
}