Я разрабатываю макет и у меня возникает проблема с ScrollView. Специально, у меня есть ScrollView и RecyclerView внутри этого ScrollView. Когда я выбираю элементы в последнем ряду RecyclerView, представление не остается в последнем ряду, оно перемещается вверх в верхний ряд. Например, мой взгляд имеет 4 строки. Когда я выбираю элемент в 4-й строке, вид автоматически перемещается до 3-й строки. Итак, как я могу предотвратить это, чтобы при выборе элементов в последнем ряду вид оставался, а не двигался вверх? Спасибо
Расположение:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/selectPayment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:text="@string/select_payment_method"
android:textSize="@dimen/sp_20"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/choosePayment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:textSize="@dimen/sp_16"
android:text="@string/choose_payment_method"
app:layout_constraintStart_toStartOf="@+id/selectPayment"
app:layout_constraintTop_toBottomOf="@+id/selectPayment" />
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="@dimen/dp_30"
android:layout_marginBottom="10dp"
android:fadeScrollbars="false"
app:layout_constraintBottom_toTopOf="@+id/continueButton"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/choosePayment">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/paymentMethodRV"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</ScrollView>
<Button
android:id="@+id/continueButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="@string/continue_in_cap"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
Адаптер:
public class PaymentAdapter extends RecyclerView.Adapter<PaymentAdapter.ViewHolder> {
private Context context;
private List<CardItems> cardItemsList;
private int rowIndex = -1;
public PaymentAdapter(Context context, List<CardItems> cardItemsList) {
this.context = context;
this.cardItemsList = cardItemsList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.payment_method_items, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.paymentImage.setImageResource(cardItemsList.get(position).getCardImage());
holder.paymentTitle.setText(cardItemsList.get(position).getCardNumber());
holder.setItemClickListener(new ItemClickListener() {
@Override
public void onItemClick(int position) {
rowIndex = position;
notifyDataSetChanged();
}
});
//set highlight color when option is clicked
if (rowIndex == position){
holder.frameContainer.setBackgroundResource(R.drawable.green_rounded_button);
}
else {
holder.frameContainer.setBackgroundResource(R.drawable.white_grey_rounded_button);
}
}
@Override
public int getItemCount() {
return cardItemsList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
ImageView paymentImage;
TextView paymentTitle;
FrameLayout frameContainer;
ItemClickListener itemClickListener;
public ViewHolder(@NonNull View itemView) {
super(itemView);
paymentImage = itemView.findViewById(R.id.paymentImage);
paymentTitle = itemView.findViewById(R.id.paymentTitle);
frameContainer = itemView.findViewById(R.id.frameContainer);
itemView.setOnClickListener(this);
}
//handle click on each category
@Override
public void onClick(View view) {
itemClickListener.onItemClick(getAdapterPosition());
notifyDataSetChanged();
}
public void setItemClickListener(ItemClickListener listener){
itemClickListener = listener;
}
}
//for listening from holder
public interface ItemClickListener{
void onItemClick(int position);
}
}