效果图
网格布局:列表布局:
要实现网格布局和列表布局之间切换的效果,我知道有两种方法可以实现这个效果。一种是通过定义两个不同布局内容的适配器,通过切换是适配器来切换布局内容,这种方法感觉不叫笨拙,相对而言我比较喜欢使用另一种方法。另一种方法则只需要定义一个适配器,在适配的内部定义一个变量来区分具体使用哪个布局内容,在通过这个变量来实现切换的效果。下面贴出主要的实现代码。
首先第一步是在activity中或fragment中定义好需要的两个布局(网格,列表),也就是创建布局管理器,接下来就是正常操作的初始化RecyclerView。然后是设置点击事件切换布局。
内容有所省略,加载RecyclerView数据的方法不贴。代码:
public class HomeFragment extends Fragment {
private Activity myActivityContext; //Activity上下文
private GridLayoutManager gridLayoutManager;//网格布局
private LinearLayoutManager linearLayoutManager;//列表布局
private CommodityAdapter rvCommodityAdapter;//RecyclerView的适配器
/*控件*/
private CheckBox cbCut; //切换排列方式按钮
private RecyclerView rvResult;//RecyclerView容器
@Override
public void onAttach(@NonNull Context context) {
super.onAttach(context);
myActivityContext = (Activity) context;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_home, container, false);
/*获取控件*/
cbCut = view.findViewById(R.id.cb_home_cut);
rvResult = view.findViewById(R.id.rv_home_result);
gridLayoutManager = new GridLayoutManager(myActivityContext, 2);
linearLayoutManager = new LinearLayoutManager(myActivityContext);
init(); //初始化页面
setViewEventListener