gpt4 book ai didi

java - 如何使用动态跨度计数设置android交错水平回收器 View

转载 作者:行者123 更新时间:2023-12-03 23:02:10 27 4
gpt4 key购买 nike

我需要这种回收站 View .但是当我使用 水平交错 View ,我必须定义行数。
enter image description here
我需要在下面解决这些问题。

  • 不应有水平滚动条或 ScrollView 。
  • 当第一行被填充时, View 必须开始填充下一行。
  • 每行的组件计数可以是动态的。

  • 这是我的代码
    DeviceProfileFragment.java
    public class DeviceProfileFragment extends Fragment {

    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    RecyclerView moduleList;
    List<String> modules;
    ModuleRowViewAdapter adapter;

    public DeviceProfileFragment() {
    // Required empty public constructor
    }

    /**
    * Use this factory method to create a new instance of
    * this fragment using the provided parameters.
    *
    * @param param1 Parameter 1.
    * @param param2 Parameter 2.
    * @return A new instance of fragment BlankFragment.
    */
    // TODO: Rename and change types and number of parameters
    public static DeviceProfileFragment newInstance(String param1, String param2) {
    DeviceProfileFragment fragment = new DeviceProfileFragment();
    Bundle args = new Bundle();
    args.putString(ARG_PARAM1, param1);
    args.putString(ARG_PARAM2, param2);
    fragment.setArguments(args);
    return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
    mParam1 = getArguments().getString(ARG_PARAM1);
    mParam2 = getArguments().getString(ARG_PARAM2);
    }


    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_device_profile, container, false);
    moduleList = (RecyclerView) view.findViewById(R.id.moduleList);

    modules = new ArrayList<>();
    modules.add("IR Module");
    modules.add("x2 Motor Driver");
    modules.add("x2 Motor Driver");
    modules.add("Display");
    modules.add("Battery");

    adapter = new ModuleRowViewAdapter(this.getContext(),modules);
    StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2,StaggeredGridLayoutManager.HORIZONTAL);
    moduleList.setLayoutManager(staggeredGridLayoutManager);
    moduleList.setAdapter(adapter);
    return view;
    }
    }
    这是 fragment 的适配器类
    ModuleRowViewAdapter.java
    public class ModuleRowViewAdapter extends RecyclerView.Adapter<ModuleRowViewAdapter.ViewHolder> {

    List<String> modules;
    LayoutInflater inflater;

    public ModuleRowViewAdapter(Context ctx, List<String> modules){
    this.modules=modules;
    this.inflater=LayoutInflater.from(ctx);
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = inflater.inflate(R.layout.list_item_module,parent,false);
    return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    holder.moduleName.setText(modules.get(position));
    }

    @Override
    public int getItemCount() {

    return modules.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder{

    TextView moduleName;
    public ViewHolder(@NonNull View itemView) {
    super(itemView);
    moduleName=itemView.findViewById(R.id.moduleName);
    }
    }
    }

    最佳答案

    使用FlexboxLayoutManager作为您的 recyclerview 的布局管理器,来自 https://github.com/google/flexbox-layout .
    我的项目有这个确切的 UI/要求并使用 FlexboxLayoutManager(context, FlexDirection.ROW, FlexWrap.WRAP)实现它。

    关于java - 如何使用动态跨度计数设置android交错水平回收器 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64936838/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com