Search code examples
androidandroid-recyclerviewgetadapter

Retrieve data from RecyclerView


I use RecyclerView in the application using a custom adapter. I want to deal with the existing menu RecyclerView items. To access them like normal variables so that I can apply a specific condition or send them in a text message and so on outside of my Class adapter.

How to access RecyclerView items?

Code class matrix:

public class MainActivity extends AppCompatActivity {

    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        super.onCreate(savedInstanceState);

        addItem();

        Button button = findViewById(R.id.get_item);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                    I want when I press the button
                    The items are called
                 */
            }
        });

    }

    public void addItem() {

        List<Shops> shops = new ArrayList<>();
        String[] cloth = {"Silk", "Cotton", "Linen"};
        String[] wood = {"Sandal", "Jawi", "Pine"};
        String[] metal = {"Window", "door", "roof"};

        RecyclerView recyclerView = findViewById(R.id.list_shop);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));

        for (int i = 0; i < cloth.length; i++) {

            Shops shopsList = new Shops(cloth[i], wood[i], metal[i]);

            shops.add(shopsList);
        }

        ShopsAdapter adapter = new ShopsAdapter(shops);
        recyclerView.setAdapter(adapter);
    }
}

code Class list

public class Shops {
    String cloth, wood, metal;

    public Shops(String cloth, String wood, String metal) {
        this.cloth = cloth;
        this.wood = wood;
        this.metal = metal;
    }
}

Code Class Adapter

public class ShopsAdapter extends RecyclerView.Adapter<ShopsAdapter.ShopsHolder> {

    private List<Shops> shopsList;

    public ShopsAdapter(List<Shops> shops) {
        this.shopsList = shops;
    }

    @Override
    public ShopsHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View row = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.template_recycler_view, viewGroup, false);
        ShopsHolder holder = new ShopsHolder(row);
        return holder;
    }

    @Override
    public void onBindViewHolder(ShopsHolder holder, int i) {

        Shops shops = shopsList.get(i);
        holder.cloth.setText(shops.cloth);
        holder.wood.setText(shops.wood);
        holder.metal.setText(shops.metal);

    }

    @Override
    public int getItemCount() {
        return shopsList.size();
    }

    class ShopsHolder extends RecyclerView.ViewHolder {
        private TextView cloth, wood, metal;

        public ShopsHolder(View itemView) {
            super(itemView);
            cloth = itemView.findViewById(R.id.cloth);
            wood = itemView.findViewById(R.id.wood);
            metal = itemView.findViewById(R.id.metal);
        }
    }
}

If you need the XML code, I will put it in another reply.


Solution

  • Create your model / POJO class with getters() and setters () like this

    public class Shops {
    
        private String cloth;
        private String wood;
        private String metal;
    
        public Shops(String cloth, String wood, String metal) {
            this.cloth = cloth;
            this.wood = wood;
            this.metal = metal;
        }
    
        public String getCloth() {
            return cloth;
        }
    
        public void setCloth(String cloth) {
            this.cloth = cloth;
        }
    
        public String getWood() {
            return wood;
        }
    
        public void setWood(String wood) {
            this.wood = wood;
        }
    
        public String getMetal() {
            return metal;
        }
    
        public void setMetal(String metal) {
            this.metal = metal;
        }
    }
    

    Now declare the ArrayList globally and add items to it. When you click button simple access them with index number. You can run a for loop for that.

    public class MainActivity extends AppCompatActivity {
    
    private  List<Shops> shops;
    
    protected void onCreate(Bundle savedInstanceState) {
        setContentView(R.layout.activity_main);
        super.onCreate(savedInstanceState);
        shops= new ArrayList<>();
        addItem();
    
        Button button = findViewById(R.id.get_item);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                /*
                    I want when I press the button
                    The items are called
                 */
                shops.get(1).getCloth();
                shops.get(1).getWood();
                shops.get(1).getMetal();
    
                // do whatever you want with them
    
            }
        });
    
    }
    
    public void addItem() {
    
    
        String[] cloth = {"Silk", "Cotton", "Linen"};
        String[] wood = {"Sandal", "Jawi", "Pine"};
        String[] metal = {"Window", "door", "roof"};
    
        RecyclerView recyclerView = findViewById(R.id.list_shop);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
    
        for (int i = 0; i < cloth.length; i++) {
    
            Shops shopsList = new Shops(cloth[i], wood[i], metal[i]);
    
            shops.add(shopsList);
        }