RecyclerView портит дочерний вид при прокрутке - PullRequest
0 голосов
/ 26 октября 2018

Ну, я попытался внедрить утилиту просмотра в Android Studio следующим образом:

public class RecycleViewAdapter extends RecyclerView.Adapter<RecycleViewAdapter.ViewHolder> {

public String[] dataSet;
public Context context;


//---------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------//


public class ViewHolder extends RecyclerView.ViewHolder{

    public ImageView image;
    public TextView name;

    public ViewHolder(View itemView) {
        super(itemView);

        this.image = itemView.findViewById(R.id.image);
        this.name = itemView.findViewById(R.id.name);

    }

    public void bindData(Object data){

        String extractedData = (String)data;

        this.name.setText("");
        this.name.setText(extractedData);

        this.image.getLayoutParams().height = getRandomIntInRange(250, 100);

    }

}


//---------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------//


public RecycleViewAdapter(Context context, String[] dataSet){

    this.context = context;
    this.dataSet = dataSet;

}

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

    View view = LayoutInflater.from(context).inflate(R.layout.food_view,parent,false);
    ViewHolder viewHolder = new ViewHolder(view);

    // Resolves the messed up views after recycling.
    viewHolder.setIsRecyclable(false);

    return viewHolder;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    holder.bindData(dataSet[position]);

}

@Override
public int getItemCount() {
    return dataSet.length;
}

// Custom method to get a random number between a range
protected int getRandomIntInRange(int max, int min){

    Random rdm = new Random();

    return rdm.nextInt((max-min)+min)+min;
}

}

Каким-то образом я заметил, что как только я прокручиваю вверх и вниз переработанные виды, они запутываются ...

Вот картинка без прокрутки:

нормальный

А вот еще один после прокрутки ... как вы можете видеть, полностью запутался:

испорчен

Почему это происходит и как я могу предотвратить это? У кого-нибудь есть решение?

1 Ответ

0 голосов
/ 27 октября 2018

Well Adapter вызывает onBindViewHolder() все время, когда ему необходимо воссоздать вид на экране.Вам нужно позвонить getRandomIntInRange() за пределами onBindViewHolder()

Вы могли видеть это: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...