如何制作溢出后进入下一行的列表视图,并且只有一个项目应该是可选的

Posted

技术标签:

【中文标题】如何制作溢出后进入下一行的列表视图,并且只有一个项目应该是可选的【英文标题】:How to make list view which goes in next line after overflow and only one item should be selectable 【发布时间】:2020-01-11 20:12:42 【问题描述】:

我是 android 开发新手,在开发过程中遇到了问题。首先看一下我想做的设计。

https://imgur.com/wja71Fl

在图像中,尺寸列表是从服务器获取并显示的,但在这里我想要的是假设另一个尺寸 11 被给出然后它应该自动移动到下一行。所以我知道这里不能使用回收站视图。现在我如何才能实现这一点,另一点是我如何才能从尺寸集合中只选择一个项目,并且选择另一个尺寸应该取消选择先前选择的尺寸。请为我提供一些实现这两个目标的好方法。

【问题讨论】:

then it should automatically move to next line 搜索FlowLayoutonly one item is selected ... and selecting other size should de-select previous 使用 RadioButtons + RadioGroup。要使RadioButtonTextView 一样掠夺,请将其可绘制按钮设置为null,并为selected 状态的背景创建一个选择器 【参考方案1】:

实现这一观点。您可以将 recyclerview 与 GridLayoutManager 一起使用。在 gridview 中,我们将项目数设置为一行。试试这个代码来实现这个视图。在这段代码中,我使用了带有 gridview 的回收站视图。在这段代码中,我只实现了一项选择检查。

代码

第一个活动

public class FirstActivity extends AppCompatActivity
   RecyclerView recycler_view;
   GridLayoutManager manager;
   static  int selectItem=-1;
   CustomAdapter customAdapter;
   protected void onCreate(Bundle savedInstanceState)
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_first);
      initView();
   

   private void initView()
      ArrayList<String> list=new ArrayList<>();
      list.add("8");
      list.add("10");
      list.add("11");
      list.add("12");
      list.add("14");
      list.add("16");
      list.add("18");
      recycler_view=findViewById(R.id.recycler_view);
      manager=new GridLayoutManager(this, 5);
      recycler_view.setLayoutManager(manager);
        customAdapter=new CustomAdapter(this, list);
      recycler_view.setAdapter(customAdapter);
   

自定义适配器

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.MyHolder>
   Context context;
   ArrayList<String> dataList;


   public CustomAdapter(Context context, ArrayList<String> dataList, )
      this.context=context;
      this.dataList=dataList;

   

   @NonNull

   @Override
   public MyHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
      View view=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_custom,viewGroup,false);
      MyHolder myHolder=new MyHolder(view);
      return myHolder;
   

   @Override
   public void onBindViewHolder(@NonNull MyHolder myHolder, final int i)
      //check select item position
      if(selectItem==i)
         myHolder.textView.setTextColor(Color.RED);
      else 
         myHolder.textView.setTextColor(Color.BLACK);
      
    myHolder.textView.setText(dataList.get(i));
    myHolder.itemView.setOnClickListener(new View.OnClickListener()
       @Override
       public void onClick(View v)
          selectItem=i;
          notifyDataSetChanged();
       
    );
   

   @Override
   public int getItemCount()
      return dataList.size();
   

   public class MyHolder extends RecyclerView.ViewHolder
    TextView textView;
      public MyHolder(@NonNull View itemView)
         super(itemView);
         textView=itemView.findViewById(R.id.text_tv);
      
   

我希望它对你有用,如果有任何查询评论我

【讨论】:

以上是关于如何制作溢出后进入下一行的列表视图,并且只有一个项目应该是可选的的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SwiftUI 中使整个列表行成为 NavigationLink

如何在溢出屏幕的 SwiftUI 中制作无限宽度的视图?

如何在 Chrome 中制作溢出菜单?

如何使用 jQuery 制作可编辑的列表项?

Xamarin/SQLite/C# - 如何使用菜单项删除从列表视图和 SQLite 表中删除一行

如何在 SwiftUI 中创建一个列表视图,每个列表项都是一个 WKWebView(我的实现非常慢并且有问题)