1

My application has a main activity with a list of items (let's say item A and item B), every item will launch the same activity (UserGalleryActivity) but the recyclerView inside the Activity should display only the items related to the item (let's call it A) selected in the MainActivity.

My problem is, if I select first (for example) the item A, it works correctly and the RecyclerView in the UserGalleryActivity display only the A's items, but then, when I go back to the MainActivity and select B, the UserGalleryActivity show me the A's items AND also the B's items.

How can I fix this issue? any idea? Thank you in advance

Code of the UserGalleryActivity:

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

    //L'activity riceve tramite intent dal main l'oggetto User
    Intent intent = getIntent();
    int user = intent.getIntExtra("user", -1);
    System.out.println("UserIndex: " + user);
    System.out.println(UsersSingleton.getInstance().getArray().get(user).getPhotos().size());
    if(user >= 0 && user<=UsersSingleton.getInstance().getArray().size()){
        String username = UsersSingleton.getInstance().getArray().get(user).getUsername();
        username = username.substring(0, 1).toUpperCase() + username.substring(1);
        UserGalleryActivity.this.setTitle(username);
        System.out.println("UserIndex: " + user);
        //System.out.println(UsersSingleton.getInstance().getArray().get(user).getPhotos().get(0).toString());
        setRecycleView(user);

    }

}


//Al termine della creazione dell'arraylist di users viene invocata setReView con parameto l'arraylist creato
private void setRecycleView(int userIndex){
    RecyclerView recyclerView = findViewById(R.id.photosList);
    recyclerView.setHasFixedSize(true);
    RecyclerView.LayoutManager layoutManager = new GridLayoutManager(this,2);
    recyclerView.setLayoutManager(layoutManager);
    MyAdapterPhotos adapter = new MyAdapterPhotos(this, userIndex);
    recyclerView.setAdapter(adapter);

Code of MyAdapterPhotos:

private int usersIndex;
private Context context;
JSONHelper jsonHelper;
URLHelper urlHelper;
ArrayList<Photo> photosList;
//Bitmap bitmap;


public MyAdapterPhotos(Context context, int usersList) {
    this.context = context;
    this.usersIndex = usersList;
    jsonHelper = new JSONHelper();
    urlHelper = new URLHelper();
    photosList = new ArrayList<>();

}

@NonNull
@Override

public MyAdapterPhotos.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cell_layout_gallery,
            viewGroup, false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
    if (UsersSingleton.getInstance().getArray().get(usersIndex).getPhotos().get(position) != null){
        holder.title.setText(UsersSingleton.getInstance().getArray().get(usersIndex).getPhotos().get(position).getCity());
        holder.img.setScaleType(ImageView.ScaleType.CENTER_CROP);//prima era centercrop
        String username = UsersSingleton.getInstance().getArray().get(usersIndex).getUsername();
        username = username.substring(0, 1).toUpperCase() + username.substring(1);
        holder.author.setText(username);
        System.out.println("Numero di Foto: " + UsersSingleton.getInstance().getArray().get(usersIndex).getPhotos().size());
        System.out.println("Posizione: " + position);
        System.out.println(UsersSingleton.getInstance().getArray().get(usersIndex).getPhotos().get(position).toString());
        setImage(UsersSingleton.getInstance().getArray().get(usersIndex).getPhotos().get(position).getSmall(), holder.img);
    }


}

@Override
public int getItemCount() {
    return UsersSingleton.getInstance().getArray().get(usersIndex).getPhotos().size();
}

public class ViewHolder extends RecyclerView.ViewHolder{
    private TextView title;
    private ImageView img;
    private TextView author;

    public ViewHolder(View view){
        super(view);
        title = view.findViewById(R.id.title_g);
        img = view.findViewById(R.id.img_g);
        author = view.findViewById(R.id.author_g);


        // on image item click
        img.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                // get position
                int pos = getAdapterPosition();

                // check if item still exists
                if(pos != RecyclerView.NO_POSITION){
                    int clickedDataItem = pos;

                    /* for future animation
                    if (img.getDrawable() != null) {
                        bitmap = ((BitmapDrawable) img.getDrawable()).getBitmap();
                    } */

                    //se l'array di photo dell'utente è ancora vuoto, scaricale. altrimenti usa quelle che hai gia
                    Intent photosIntent = new Intent(context, PhotoDetailActivity.class);
                    photosIntent.putExtra("user", usersIndex);
                    photosIntent.putExtra("photo", clickedDataItem);
                    context.startActivity(photosIntent);

                    /*  for future animations
                    ActivityTransitionLauncher.with((AppCompatActivity) context)
                            .from(img)
                            .image(bitmap)
                            .launch(photosIntent);*/

                    //se l'array di photo dell'utente è ancora vuoto, scaricale. altrimenti usa quelle che hai gia


                }
            }
        });

        // on title item click
        view.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                // get position
                int pos = getAdapterPosition();

                // check if item still exists
                if(pos != RecyclerView.NO_POSITION){
                    //Photo clickedDataItem = UsersSingleton.getInstance().getArray().get(usersIndex).getPhotos().get(pos);
                    int clickedDataItem = pos;

                    //se l'array di photo dell'utente è ancora vuoto, scaricale. altrimenti usa quelle che hai gia
                    Intent photosIntent = new Intent(context, PhotoDetailActivity.class);
                    photosIntent.putExtra("user", usersIndex);
                    photosIntent.putExtra("photo", clickedDataItem);
                    context.startActivity(photosIntent);



                    //Toast.makeText(v.getContext(), "You clicked " + clickedDataItem, Toast.LENGTH_SHORT).show();
                }
            }
        });

    }

}
// metodo set immagine dell'utente dell'imageview
private void setImage(String imageUrl, ImageView img){
    CircularProgressDrawable circularProgressDrawable =
            new CircularProgressDrawable(context);
    circularProgressDrawable.setStrokeWidth(5f);
    circularProgressDrawable.setCenterRadius(30f);
    circularProgressDrawable.start();
    GlideApp.with(context)
            .load(imageUrl)
            .placeholder(circularProgressDrawable)
            .into(img);
}
houman.sanati
  • 1,054
  • 3
  • 18
  • 34
Alex
  • 245
  • 3
  • 12

1 Answers1

1

Hear is an idea :

First you should clear your list and then add another data to that

   yourlist.clear();
   // then add item B to your list and call adapter

Example :

      //   Items : 

        Room A = new Room();
        Room B = new Room();

  //  THEN FILL A AND B ...

Filling list like below and call adapter :

        List<Room> roomList = new ArrayList<>();
        roomList.add(A);
        Adapter adapter = new Adapter(roomList , getContext(), this);
        recyclerView.setLayoutManager(new GridLayoutManager(getActivity() , 1));
        recyclerView.setAdapter(adapter);

I thinked that you didnt clear your list from item A :

        roomList.clear();
        roomList.add(B);
       // adapter.notifyDataSetChanged(); Or :
        adapter = new Adapter(roomList , getContext(), this);
        recyclerView.setLayoutManager(new GridLayoutManager(getActivity() , 1));
        recyclerView.setAdapter(adapter);
reza shah
  • 71
  • 6