У меня есть RecyclerView и я хочу расширить строки с помощью ConstraintSet's.
Часть RecyclerView работает, и общая идея расширения / свертывания с помощью ConstraintSet также работает, но она расширяет неправильную строку.
Если я нажимаю на первую запись, она расширяет некоторый элемент, например, на 10 строк ниже.
Поскольку я новичок в использовании RecyclerView и ConstraintSet, я немного растерялся из-за того, как его решить.
Код моего адаптера выглядит так:
public class ProgressAdapter extends RecyclerView.Adapter<ProgressAdapter.MyViewHolder> {
private List<ProgressData> progressData;
private ConstraintSet collapsedConstraintSet = new ConstraintSet();
private ConstraintSet expandedConstraintSet = new ConstraintSet();
private ConstraintLayout mainLayout;
private boolean expanded = false;
public class MyViewHolder extends RecyclerView.ViewHolder {
public TextView t1;
...
public MyViewHolder(View itemView) {
super(itemView);
t1 = (TextView) itemView.findViewById(R.id.t1text);
...
}
}
public ProgressAdapter(List<ProgressData> progressData) {
this.progressData = progressData;
}
@NonNull
@Override
public ProgressAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View progressView = LayoutInflater.from(parent.getContext()).inflate(R.layout.progress_item, parent, false);
mainLayout = (ConstraintLayout) progressView;
collapsedConstraintSet.clone(mainLayout);
expandedConstraintSet.clone(mainLayout.getContext(), R.layout.progress_item_expanded);
mainLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
TransitionManager.beginDelayedTransition(mainLayout);
if (expanded) {
collapsedConstraintSet.applyTo(mainLayout);
expanded = false;
} else {
expandedConstraintSet.applyTo(mainLayout);
expanded = true;
}
}
});
return new MyViewHolder(progressView);
}
@Override
public void onBindViewHolder(@NonNull ProgressAdapter.MyViewHolder holder, final int position) {
ProgressData progress = progressData.get(position);
holder.t1.setText(progress.getNumber());
...
}
@Override
public int getItemCount() {
return progressData.size();
}
}
Результат не меняется, независимо от того, куда я поместил ClickListener (где он сейчас, или в ViewHolder, или в onBind).
Когда я регистрирую mainLayout.getId()
, это всегда -1
, может быть, это часть проблемы?
Я просто не понимаю, как передать Id или что-то еще из строки, по которой щелкнули, моему applyTo
, или, может быть, я уже каким-то образом это делаю ?! Как я уже сказал, для меня все это ново, и я нырнул прямо в глубокий конец здесь.
Я надеюсь, что кто-то может помочь мне с этим.