Как передать ArrayList в RecyclerView?

Есть у меня AlertDialog в нем раньше располагался ListView в который выводилось содержимое ArrayList'a. Для красоты я решил заменить его на Recyclerview, Card и начались проблемы.

В ArrayList mainListWord в процессе работы добавляются элементы и они должны попадать в карточки Recyclerview. Проблема заключается в том, что либо сразу весь список попадает в одну карточку, либо каждая следующая каточка содержит предыдущие элементы + 1. Например: первая карточка: 1 элемент, вторая карточка: 2 элементы и т.д.

Как реализовать так, что бы при добавлении в массив нового элемента, он помещался в свою отдельную карточку?

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
    
       <EditText
           android:id="@+id/innerText"
           android:layout_width="wrap_content"
           android:layout_height="50dp"
           android:layout_centerInParent="true"/>
    
        <Button
            android:id="@+id/press"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:text="Press"
            android:layout_below="@id/innerText"
            android:layout_centerHorizontal="true"
            android:onClick="openDialog"/>
    
    </RelativeLayout>


recycler_item.xml

<?xml version="1.0" encoding="utf-8"?>
        <androidx.cardview.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        app:cardCornerRadius="4dp"
        android:layout_margin="4dp"
        app:cardBackgroundColor="@color/colorCardBack">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="5dp"
            android:background="@color/colorCard">
    
            <ImageView
             android:id="@+id/imageView_1"
             android:layout_width="50dp"
             android:layout_height="50dp"
             android:padding="4dp" />
                <TextView
                android:id="@+id/textview_1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Text_1"
                android:textStyle="bold"
                android:textColor="@android:color/black"
                android:layout_centerInParent="true"
                android:textSize="16sp"
                android:layout_marginStart="5dp"
                android:layout_toEndOf="@id/imageView_1"/>
    
    </RelativeLayout>
    </androidx.cardview.widget.CardView>


stats_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
    
    
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/recycler_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="50dp"
            android:layout_margin="10dp"
            android:background="@color/colorAccent"
            android:scrollbars="vertical"
            android:layout_above="@id/butClose"/>
    
        <Button
            android:id="@+id/butClose"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="5dp"
            android:layout_centerHorizontal="true"
            android:layout_alignParentBottom="true"/>
    </RelativeLayout>


MainActivity.java

public class MainActivity extends AppCompatActivity {
    
        private EditText innerText;
        private Button press, butClose;
    
        private ArrayList<RecyclerViewItem> recyclerViewItem;
        private ArrayList<String> mainListWord;
        private AlertDialog OptionDialog;
    
            private RecyclerView recyclerView;
            private RecyclerView.Adapter adapter;
            private RecyclerView.LayoutManager layoutManager;
    
        @RequiresApi(api = Build.VERSION_CODES.O)
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            recyclerViewItem =  new ArrayList<>();
            mainListWord =  new ArrayList<>();
    
            innerText = findViewById(R.id.innerText);
            press = findViewById(R.id.butClose);
    
    
        }
    
        @RequiresApi(api = Build.VERSION_CODES.O)
        public void makeRecyclerList(ArrayList<String> income){
           String[] listWord_lenght = income.toArray(new String[0]);
           String keyWord = (String.join("", listWord_lenght));
            recyclerViewItem.add(new RecyclerViewItem(R.drawable.star, keyWord));
    
        }
    
        @RequiresApi(api = Build.VERSION_CODES.O)
        public void openDialog(View v){
            String word = innerText.getText().toString();
            mainListWord.add(word);
                makeRecyclerList(mainListWord);
            Dialogus();
            innerText.setText("");
        }
    
        public void Dialogus(){
    
            LayoutInflater li = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            View v = li.inflate(R.layout.stats_fragment, null, false);
                OptionDialog = new AlertDialog.Builder(this).create();
                OptionDialog.setTitle("TestInfo");
                    recyclerView = v.findViewById(R.id.recycler_view);
                    recyclerView.setHasFixedSize(true);
                    adapter = new RecyclerViewAdapter(recyclerViewItem);
                    layoutManager = new LinearLayoutManager(this);
                    recyclerView.setAdapter(adapter);
                    recyclerView.setLayoutManager(layoutManager);
                        butClose =  v.findViewById(R.id.butClose);
                            OptionDialog.setView(v);
                            OptionDialog.setCancelable(true);
                                butClose.setBackgroundColor(Color.CYAN);
                                butClose.setOnClickListener(new View.OnClickListener() {
                                    public void onClick(View v) {
                                        OptionDialog.dismiss();
                                    }
                                });
                                OptionDialog.show();
                }
    }


RecyclerViewAdapter.java

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewViewHolder> {
    
        private ArrayList<RecyclerViewItem> arrayList;
    
        public static class RecyclerViewViewHolder extends RecyclerView.ViewHolder {
    
    
    
    
        public ImageView imageView_1;
        public TextView textview_1;
    
    
            public RecyclerViewViewHolder(@NonNull View itemView) {
                super(itemView);
                imageView_1 = itemView.findViewById(R.id.imageView_1);
                textview_1 = itemView.findViewById(R.id.textview_1);
            }
        }
    
    
        public RecyclerViewAdapter(ArrayList<RecyclerViewItem> arrayList){
            this.arrayList = arrayList;
        }
    
        @NonNull
        @Override
        public RecyclerViewViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
    
            View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recycler_item, viewGroup, false);
                RecyclerViewViewHolder recyclerViewViewHolder= new RecyclerViewViewHolder(view);
                return  recyclerViewViewHolder;
    
        }
    
        @Override
        public void onBindViewHolder(@NonNull RecyclerViewViewHolder recyclerViewViewHolder, int position) {
            RecyclerViewItem recyclerViewItem = arrayList.get(position);
                recyclerViewViewHolder.imageView_1.setImageResource(recyclerViewItem.getImageResource());
                recyclerViewViewHolder.textview_1.setText(recyclerViewItem.getText_1());
        }
    
        @Override
        public int getItemCount() {
            return arrayList.size();
        }
        
    }


RecyclerViewItem.java

package freijer.app.one;
    
    public class RecyclerViewItem {
    
        private int imageResource;
        private String text_1;
    
        public int getImageResource() {
            return imageResource;
        }
        public void setImageResource(int imageResource) {
            this.imageResource = imageResource;
        }
            public String getText_1() {
                return text_1;
            }
            public void setText_1(String text_1) {
                this.text_1 = text_1;
            }
    
    
        public RecyclerViewItem(int imageResource, String text_1) {
            this.imageResource = imageResource;
            this.text_1 = text_1;
        }
    }
  • Вопрос задан
  • 249 просмотров
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Ты сам в методе makeRecyclerList склеиваешь все свои слова вместе и затем добавляешь эту склейку в список, который потом попадает в адаптер. Перестань это делать и всё.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы