Как сделать выбранный предмет, который находится в обзоре переработчика?

С помощью recyclerview я делаю календарь, и я хочу, чтобы, когда пользователь скользит вниз или вверх, элемент, проходящий через центр, можно было зафиксировать и считать выбранным.

introducir la descripción de la imagen aquí

Как видите, число, проходящее через маркер, не зафиксировано внутри него.

Здесь я оставляю код, насколько я сделал:

widget_bottom_sheet_date_ birth.xml:





    

    

        

            

            

            

        

        

            

                

                    

                    
                

                

                    

                    
                

                

                    

                    
                
            
        

        

            

RecyclerAdapterCalendario.java:

public class RecyclerAdapterCalendario extends RecyclerView.Adapter {

// region Variables

private Context context;
private ArrayList listaValues;

// endregion

// region Constructor

public RecyclerAdapterCalendario(Context context, ArrayList listaValues) {
    this.context = context;
    this.listaValues = listaValues;
}

// endregion

// region CallBack System

@NonNull
@Override
public ViewHolderItem onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_bottom_sheet_fecha_nacimiento, parent, false);
    return new ViewHolderItem(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolderItem holder, int position) {
    holder.textView.setText(listaValues.get(position).getValue());
}

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

// endregion

// region SuperClass

public class ViewHolderItem extends RecyclerView.ViewHolder {
    TextView textView;

    public ViewHolderItem(@NonNull View itemView) {
        super(itemView);
        textView = itemView.findViewById(R.id.txtView);
    }
}

// endregion
}

Fragment.java:

private void mostrarCalendario() {
    final View view = getLayoutInflater().inflate(R.layout.widget_bottom_sheet_fecha_nacimiento, null);
    final Button buttonAceptar = view.findViewById(R.id.btn_Aceptar);
    final Button buttonCancelar = view.findViewById(R.id.btn_Cancelar);
    final LinearLayoutManager manager = new LinearLayoutManager(getContext());
    buttonAceptar.setClipToOutline(true);
    buttonCancelar.setClipToOutline(true);

    for (int i = 0; i < 30; i++) {
        listaValues.add(new ItemCalendario(String.valueOf(i)));
    }

    adapterCalendario = new RecyclerAdapterCalendario(getContext(), listaValues);
    recyclerViewDias = view.findViewById(R.id.recyclerView_Dia);
    recyclerViewDias.setHasFixedSize(true);
    recyclerViewDias.setAdapter(adapterCalendario);
    recyclerViewDias.setLayoutManager(manager);
    bottomSheetDialogCalendario.setContentView(view);
    bottomSheetDialogCalendario.setCancelable(false);
    bottomSheetDialogCalendario.create();
    bottomSheetDialogCalendario.show();
}

0
задан 30.11.2019, 07:02
1 ответ

Уже не необходимо устанавливать layoutManger в коде java, возможно устанавливать прямо в xml:

<androidx.recyclerview.widget.RecyclerView
                        android:id="@+id/recyclerView_Dias"
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:clipToPadding="false"
                        android:nestedScrollingEnabled="false"
                        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        tools:listitem="@layout/item_bottom_sheet_fecha_nacimiento" />

                    <View
                        android:id="@+id/view4"
                        android:layout_width="0dp"
                        android:layout_height="0dp"
                        android:alpha=".4"
                        android:background="@drawable/select_dia_calendar"
                        app:layout_constraintBottom_toBottomOf="parent"
                        app:layout_constraintEnd_toEndOf="parent"
                        app:layout_constraintHeight_default="percent"
                        app:layout_constraintHeight_percent=".35"
                        app:layout_constraintHorizontal_bias="1.0"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent"
                        app:layout_constraintWidth_default="percent"
                        app:layout_constraintWidth_percent=".95" />

                </androidx.constraintlayout.widget.ConstraintLayout>

, Чтобы мочь ориентировать элемент пока скользит recyclerView использовать:

SnapHelper snapHelperDias = new LinearSnapHelper();
snapHelperDias.attachToRecyclerView(recyclerViewDias);

Оставаясь:

private void mostrarCalendario() {
    final View view = getLayoutInflater().inflate(R.layout.widget_bottom_sheet_fecha_nacimiento, null);
    final Button buttonAceptar = view.findViewById(R.id.btn_Aceptar);
    final Button buttonCancelar = view.findViewById(R.id.btn_Cancelar);
    final LinearLayoutManager manager = new LinearLayoutManager(getContext());
    buttonAceptar.setClipToOutline(true);
    buttonCancelar.setClipToOutline(true);

    for (int i = 0; i < 30; i++) {
        listaValues.add(new ItemCalendario(String.valueOf(i)));
    }

    adapterCalendario = new RecyclerAdapterCalendario(getContext(), listaValues);
    recyclerViewDias = view.findViewById(R.id.recyclerView_Dia);
    recyclerViewDias.setHasFixedSize(true);
    recyclerViewDias.setAdapter(adapterCalendario);
    SnapHelper snapHelperDias = new LinearSnapHelper();
    snapHelperDias.attachToRecyclerView(recyclerViewDias);
    bottomSheetDialogCalendario.setContentView(view);
    bottomSheetDialogCalendario.setCancelable(false);
    bottomSheetDialogCalendario.create();
    bottomSheetDialogCalendario.show();
}
0
ответ дан 01.12.2019, 10:33