【问题标题】:Display a list in a gui - java/Android Studio [closed]在 gui 中显示列表 - java/Android Studio [关闭]
【发布时间】:2020-08-31 08:16:33
【问题描述】:

我的目标是显示一个列表,其中每个元素(迭代)都用两个按钮显示:

按钮会改变列表特定元素中的变量。

我的问题:如何在 Android Studio 中创建这个 gui?

【问题讨论】:

  • 请注意:“这些是我的要求”对于这里的许多人来说不是有效的问题。从自己开始总是更好,看看你能走多远。您通过编程学习编程,而不是通过将繁重的工作委派给其他人。
  • 列表是RecylcerView。每行都通过一个自己的布局文件一遍又一遍地生成,该文件包含一个TextView 和两个Buttons,它们位于ConstraintLayout 之类的容器中。查看本指南:developer.android.com/guide/topics/ui/layout/recyclerview

标签: java android android-layout android-gui


【解决方案1】:

这里我在android(java)中实现了一个RecyclerView的简单例子。您可以根据需要更改它:

  1. 在你的布局文件夹中添加 item.xml,并在其中写下这些行:

     <?xml version="1.0" encoding="utf-8"?>
     <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
    
     <TextView
         android:id="@+id/titleTextView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_margin="20dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintLeft_toLeftOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
    
     <Button
         android:id="@+id/option2Button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_margin="20dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent" />
    
     <Button
         android:id="@+id/option1Button"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_margin="20dp"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintRight_toLeftOf="@+id/option2Button"
         app:layout_constraintTop_toTopOf="parent" />
    
     </androidx.constraintlayout.widget.ConstraintLayout>
    

这是基于您的示例图片。此布局包含单行列表中的所有视图。如果您想在每行中添加更多按钮或文本,则必须将它们添加到此文件中。

  1. 对于 RecyclerViews,您总是需要一个 Adapter 类。因此,将 MyAdapter.java 类添加到您的项目中,如下所示:

     public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder>
     {
         private Context context;
         private List<String> titles;
    
         MyAdapter(Context context, List<String> titles)
         {
             this.context = context;
             this.titles = titles;
         }
    
         @NonNull
         @Override
         public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
         {
             RecyclerView.ViewHolder viewHolder;
             LayoutInflater inflater = LayoutInflater.from(parent.getContext());
    
             viewHolder = getViewHolder(parent, inflater);
    
             return viewHolder;
         }
    
         private RecyclerView.ViewHolder getViewHolder(ViewGroup parent, LayoutInflater inflater)
         {
             RecyclerView.ViewHolder viewHolder;
             View v1 = inflater.inflate(R.layout.item, parent, false);
             viewHolder = new ItemVH(v1);
             return viewHolder;
         }
    
         @Override
         public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position)
         {
             ItemVH itemVH = (ItemVH) holder;
    
             // set title for each item:
             itemVH.titleTextView.setText(titles.get(position));
             itemVH.option1Button.setText("option 1");
             itemVH.option2Button.setText("option 2");
    
             // click listener for first button:
             itemVH.option1Button.setOnClickListener(new View.OnClickListener()
             {
                 @Override
                 public void onClick(View v)
                 {
                     // option 1 button clicked
                 }
             });
    
             // click listener for second button:
             itemVH.option2Button.setOnClickListener(new View.OnClickListener()
             {
                 @Override
                 public void onClick(View v)
                 {
                     // option 2 button clicked
                 }
             });
         }
    
         @Override
         public int getItemCount()
         {
             return titles.size();
         }
    
         // add item to list:
         public void addItem(String title)
         {
             titles.add(title);
             notifyItemInserted(titles.size() - 1);
         }
    
         // remove item from list:
         public void remove(String title)
         {
             int position = titles.indexOf(title);
             if (position > -1)
             {
                 titles.remove(position);
                 notifyItemRemoved(position);
             }
         }
    
         protected class ItemVH extends RecyclerView.ViewHolder
         {
             private TextView titleTextView;
             private Button option1Button;
             private Button option2Button;
    
             public ItemVH(View itemView)
             {
                 super(itemView);
    
                 titleTextView = itemView.findViewById(R.id.titleTextView);
                 option1Button = itemView.findViewById(R.id.option1Button);
                 option2Button = itemView.findViewById(R.id.option2Button);
             }
         }
     }
    

标题列表是显示在项目上的字符串列表。您创建此列表并将其从 MainActivity 发送到 MyAdapter 类。单个项目中的所有视图都可以在 ItemVH 类中找到,您可以在 onBindViewHolder 函数中使用这些视图。

  1. 在activity_main.xml中添加一个RecyclerView:

     <androidx.recyclerview.widget.RecyclerView
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:id="@+id/recyclerView"/>
    
  2. 在 MainActivity.java 中的 onCreate 中添加这些行:

     // create list:
     List<String> titles = new ArrayList<>();
     titles.add("first item");
     titles.add("second item");
     titles.add("third item");
    
     // define the adapter:
     MyAdapter adapter = new MyAdapter(this, titles);
    
     // set the RecyclerView:
     RecyclerView recyclerView = findViewById(R.id.recyclerView);
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
     recyclerView.setLayoutManager(layoutManager);
     recyclerView.setAdapter(adapter);
     recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));
    

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2014-02-05
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    • 2015-10-05
    相关资源
    最近更新 更多