Как отправить данные в Bundle из адаптера RecyclerView, если кнопка нажата на фрагменте

Я установил данные в RecyclerView на Фрагмент. У меня есть один Button внизу под RecyclerView. После нажатия на кнопку, я хочу получить некоторые детали от отдельной карты после Checkbox После нажатия кнопки из Fragment Я хочу отправить данные карты в следующий фрагмент, используя Bundles,
Это код для настройки RecyclerView и с Button на дне

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="sam.sam.MyBook">

    <!-- TODO: Update blank fragment layout -->
    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.RecyclerView>

    <Button
        android:id="@+id/assignTable"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#000"
        android:textColor="#fff"
        android:textSize="18sp"
        android:layout_marginBottom="10dp"
        android:layout_gravity="center|bottom"
        android:layout_alignParentBottom="true"
        android:text="Assign"/>

</FrameLayout>  

Это код для адаптера

public class BookingAdapter extends RecyclerView.Adapter<BookingAdapter.ViewHolder> {
    private ArrayList<BookEntry> entry;
    Context context;
        String id;
    public BookingAdapter(ArrayList<BookEntry> entry, Context context) {
        this.entry = entry;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.booking_card, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final BookEntry currentEntry = entry.get(position);
        holder.name.setText(currentEntry.getName());
        holder.description.setText(currentEntry.getDescription());
        holder.capacity.setText(currentEntry.getCapacity());
        holder.tableId.setText(currentEntry.getId());
        holder.check.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String id=entry.get(position).getId();
                final boolean isChecked=holder.check.isChecked();
                if(isChecked)
                {
                    Bundle bundle=new Bundle();
                    bundle.putString("tableIds",id);
                    TableAssignConfirm confirm=new TableAssignConfirm();
                    confirm.setArguments(bundle);
                }

            }
        });

    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView name, description, capacity,tableId;
    final     CheckBox check;
        public ViewHolder(final View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.name);
            description = (TextView) itemView.findViewById(R.id.description);
            capacity = (TextView) itemView.findViewById(R.id.capacity);
            tableId=(TextView)itemView.findViewById(R.id.tableId);
            check=(CheckBox)itemView.findViewById(R.id.book);
            check.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isCheck=check.isChecked();
                    if(isCheck)
                        Log.i("isCheck","I am Check");
                        Log.i("id",id);
                }
            });
        }
    }
}  

Как это сделать?

1 ответ

Предположим на мгновение, что вы можете выбрать только одну карту в вашем представлении переработчика. Просто добавь private int mSelectedCardIndex к вашему адаптеру в качестве переменной-члена. onBinderViewHolder, где вы реализуете свою логику кликов, просто onClick сохраняет положение в mSelectedCardIndex. Также добавьте метод get в свой адаптер, чтобы вы могли получить данные выбранной карты:

public BookEntry getSelectedBookEntry(){
    return this.entry.get(mSelectedCardIndex);
}

Как вы будете обрабатывать случаи, когда нет выбранных записей или несколько зависит от вас.

Затем из вашего фрагмента вы можете просто вызвать что-то вроде (конечно, по нажатию кнопки):

BookEntry selectedBookEntry = recyclerView.getAdapter().getSelectedBookEntry();

с последующим:

Bundle bundle=new Bundle();
bundle.putString(selectedBookEntry.getValueX());

и установите args для нового фрагмента детали.

Другие вопросы по тегам