D
D
Dmitry2021-03-14 21:00:53
Java
Dmitry, 2021-03-14 21:00:53

How to pass ArrayList to RecyclerView?

I have an AlertDialog in it used to have a ListView in which the contents of ArrayList'a were displayed. For beauty, I decided to replace it with Recyclerview, Card and the problems started.

Elements are added to the ArrayList mainListWord in the process of work and they should fall into the Recyclerview cards. The problem is that either the whole list falls into one card at once, or each next card contains the previous elements + 1. For example: the first card: 1 element, the second card: 2 elements, etc.

How to implement so that when a new element is added to the array, it is placed in its own separate card?

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;
        }
    }

Answer the question

In order to leave comments, you need to log in

1 answer(s)
D
Denis Zagaevsky, 2021-03-15
@zagayevskiy

You yourself in the makeRecyclerList method glue all your words together and then add this gluing to the list, which then gets into the adapter. Stop doing it and that's it.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question