Shuffling images

Viewed 46

I am having trouble with shuffling images in home screen in a wallpaper app. i want like when ever a person opens my app the images in the home screen should be shuffled . i tried using Collections.shuffle() method, in using that what is happening is the images are getting duplicated and when i click on the shuffled image to open in fullscreen some other image opens

suppose in a list A(0,1,2,3) when i shuffle it only the display changes but when i open it itopens according to the index of list A please help me with the code as to where and how i have to use the Collections.shuffle method here is my code . I am troubled for many days and not getting the solution so please help

Homescreen.java

      public class Homescreen extends AppCompatActivity {
      RecyclerView recyclerView;
      List<WallpaperModel> list;
      private WallpaperAdapter adapter;
      DatabaseReference reference;

      public static final String TAG = Homescreen.class.getSimpleName();

      @Override
      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_homescreen);

      init();

      recyclerView.setHasFixedSize(true);

      recyclerView.setLayoutManager(new GridLayoutManager(this,3));

      list = new ArrayList<>();
      adapter.shuffle();
      adapter.notifyDataSetChanged();
    
      adapter = new WallpaperAdapter(list);
      recyclerView.setAdapter(adapter);

      reference = FirebaseDatabase.getInstance().getReference().child("Wallpapers");

      reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull  DataSnapshot snapshot) {

            list.clear();

            for (DataSnapshot dataSnapshot : snapshot.getChildren()){

                WallpaperModel model = dataSnapshot.getValue(WallpaperModel.class);
                list.add(model);
            }
            adapter.notifyDataSetChanged();
         }

         @Override
         public void onCancelled(@NonNull  DatabaseError error) {

            Log.e(TAG,error.getMessage());

         }
          });

          }

        private void
          init(){
          Toolbar toolbar = findViewById(R.id.toolbar);
          setSupportActionBar(toolbar);

           recyclerView = findViewById(R.id.recyclerView);


           }


           @Override
        public boolean onCreateOptionsMenu(Menu menu) {

        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu,menu);


         return true;
        }
        

          @Override
         public boolean onOptionsItemSelected(@NonNull MenuItem item) {

          int id = item.getItemId();

          if (id == R.id.favourite){
          startActivity(new Intent(Homescreen.this, FavouriteActivity.class));
          }

           return true;
               }
            }

and this is my wallpaperAdapter class

                     public class WallpaperAdapter extends 
                     RecyclerView.Adapter<WallpaperAdapter.WallpaperHolder> {

                     private static List<WallpaperModel> list;


                    public WallpaperAdapter(List<WallpaperModel> list) {
                    WallpaperAdapter.list = list;
                      }

                    @NonNull
                    @Override
                     public WallpaperHolder onCreateViewHolder(@NonNull  ViewGroup parent, int 
                      viewType) {


                      View view = 
                      LayoutInflater.from(parent.getContext())
                      .inflate(R.layout.wallpaper_items,parent,false);
                      return new WallpaperHolder(view);
                         }

                       @Override
                         public void onBindViewHolder(@NonNull  
                        WallpaperAdapter.WallpaperHolder holder, int position) {

                        Random random = new Random();

                        int color = Color.rgb(0,0,0);

                         Glide.with(holder.itemView.getContext().getApplicationContext())
                         .load(list.get(position).getImage())
                         .timeout(7500)

                         .into(holder.imageView);
                          holder.setClickListener();


                           }

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

                      public void shuffle() {
                      Collections.shuffle(list,new Random(System.currentTimeMillis()));
                      }

                static class WallpaperHolder extends RecyclerView.ViewHolder{

                 private ImageView imageView;

                 public WallpaperHolder(@NonNull View itemView) {
                 super(itemView);

                  imageView = itemView.findViewById(R.id.imageView);

                  }

                  void setClickListener(){
          //set on click listener on wallpaper image
           itemView.setOnClickListener(new View.OnClickListener() {
              @Override
             public void onClick(View v) {
                int position = getAdapterPosition();
                Intent intent = new Intent(itemView.getContext().getApplicationContext(), 
                 SwiperActivity.class);
                intent.putExtra("position",position);
                itemView.getContext().startActivity(intent);
               }
             });
              }
              }



              }
0 Answers
Related