Импорт текста из RecyclerView в DialogFragment
В RecyclerView есть компоненты с различным текстом, мне нужно чтобы по нажатию на компонент у которого есть текст например "Шахматы", открывался DialogFragment и в TextView которое находиться внутри этого
DialogFragment переносился текст "Шахматы" из компонента RecyclerView. Я знаю что это легко реализовать с помощью getStringExtra но как правильно это написать в Adpter не знаю. Помогите правильно написать код.
Adapter в котором нужно реализовать эту функцию
public class AdapterSkatingRinkSchedule extends RecyclerView.Adapter<AdapterSkatingRinkSchedule.SkatingRinkScheduleViewHolder>{
public ArrayList<ItemSkatingRinkSchedule> mSkatingRinkScheduleList;
public List<ItemSkatingRinkSchedule> mSearch;
private AppCompatActivity mActivity;
public AdapterSkatingRinkSchedule(ArrayList<ItemSkatingRinkSchedule> SkatingRinkScheduleList) {
mSkatingRinkScheduleList = SkatingRinkScheduleList;
mSearch = new ArrayList(mSkatingRinkScheduleList);
}
@NonNull
@Override
public SkatingRinkScheduleViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_srs, parent, false);
return new SkatingRinkScheduleViewHolder(v);
}
public static class SkatingRinkScheduleViewHolder extends RecyclerView.ViewHolder {
public TextView number_srs, start_time_srs, end_time_srs, cost_1_srs, cost_2_srs;
public LinearLayout ll_main;
public SkatingRinkScheduleViewHolder(View itemView) {
super(itemView);
number_srs = itemView.findViewById(R.id.number_srs);
start_time_srs = itemView.findViewById(R.id.start_time_srs);
end_time_srs = itemView.findViewById(R.id.end_time_srs);
cost_1_srs = itemView.findViewById(R.id.cost_1_srs);
cost_2_srs = itemView.findViewById(R.id.cost_2_srs);
ll_main = itemView.findViewById(R.id.ll_main);
}
}
@SuppressLint("LongLogTag")
@Override
public void onBindViewHolder(SkatingRinkScheduleViewHolder holder, int position) {
ItemSkatingRinkSchedule currentItem = mSkatingRinkScheduleList.get(position);
holder.number_srs.setText(currentItem.get_session_number());
holder.start_time_srs.setText(currentItem.get_session_start());
holder.end_time_srs.setText(currentItem.get_session_end());
holder.cost_1_srs.setText(currentItem.get_weekdays());
holder.cost_2_srs.setText(currentItem.get_weekends_and_holidays());
holder.getAdapterPosition();
holder.ll_main.setOnClickListener(v -> {
DialogSkatingRinkSchedule dialogSort = new DialogSkatingRinkSchedule();
dialogSort.show(((AppCompatActivity)v.getContext()).getSupportFragmentManager(), "SortDialog");
});
}
@Override
public int getItemCount() {
return mSkatingRinkScheduleList.size();
}
}
Компоновка моего item в RecyclerView
public class ItemSkatingRinkSchedule {
private final String mText_session_number;
private final String mText_session_start;
private final String mText_session_end;
private final String mText_weekdays;
private final String mText_weekends_and_holidays;
private final int mInitialPositon;
public ItemSkatingRinkSchedule(String text_session_number, String text_session_start, String text_session_end, String text_weekdays, String text_weekends_and_holidays, int initialPosition) {
mText_session_number = text_session_number;
mText_session_start = text_session_start;
mText_session_end = text_session_end;
mText_weekdays = text_weekdays;
mText_weekends_and_holidays = text_weekends_and_holidays;
mInitialPositon = initialPosition;
}
public String get_session_number() {
return mText_session_number;
}
public String get_session_start() {
return mText_session_start;
}
public String get_session_end() {
return mText_session_end;
}
public String get_weekdays() {
return mText_weekdays;
}
public String get_weekends_and_holidays() {
return mText_weekends_and_holidays;
}
public int getInitialPositon() {
return mInitialPositon;
}
}
xml файл моего DialogFragment
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/Card"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:backgroundTint="@color/color_8"
app:cardCornerRadius="2dp"
app:cardElevation="2dp">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:layout_margin="1dp"
android:backgroundTint="@color/color_1"
app:cardCornerRadius="1dp"
app:cardElevation="0dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="@color/color_1"
android:gravity="center"
android:orientation="vertical"
android:padding="6dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:paddingVertical="6dp">
<TextView
android:layout_width="222dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="fill_vertical"
android:text="Номер сеанса"
android:textColor="@color/color_8"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/number_srs_2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:text="1"
android:textColor="@color/color_22"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/color_8" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:paddingVertical="6dp">
<TextView
android:layout_width="222dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="fill_vertical"
android:text="Начало сеанса"
android:textColor="@color/color_8"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/start_srs_2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:text="10:15"
android:textColor="@color/color_22"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/color_8" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:paddingVertical="6dp">
<TextView
android:layout_width="222dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="fill_vertical"
android:text="Конец сеанса"
android:textColor="@color/color_8"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/end_srs_2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:text="11:00"
android:textColor="@color/color_22"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/color_8" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:paddingVertical="6dp">
<TextView
android:layout_width="222dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="fill_vertical"
android:text="Будние дни"
android:textColor="@color/color_8"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/cost_srs_2_1"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:text="140₽"
android:textColor="@color/color_22"
android:textSize="28sp"
android:textStyle="bold"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/color_8" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:paddingVertical="6dp">
<TextView
android:layout_width="222dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="fill_vertical"
android:text="Выходные и праздники"
android:textColor="@color/color_8"
android:textStyle="bold"
android:textSize="28sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/cost_srs_2_2"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:text="150₽"
android:textColor="@color/color_22"
android:textStyle="bold"
android:textSize="28sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.cardview.widget.CardView>
Ответы (1 шт):
Если я все правильно понял, то попробуйте так:
В коде вашего фрагмента добавьте:
public static DialogSkatingRinkSchedule newInstance(ItemSkatingRinkSchedule itemSkatingRinkSchedule) {
DialogSkatingRinkSchedule fragment = DialogSkatingRinkSchedule();
Bundle bundle = new Bundle();
bundle.putSerializable("item", itemSkatingRinkSchedule);
fragment.setArguments(bundle);
return fragment;
}
В классе вашего ItemSkatingRinkSchedule добавьте Serializable:
class ItemSkatingRinkSchedule implements Serializable
При нажатии на элемент recyclerView :
holder.ll_main.setOnClickListener(v -> {
DialogSkatingRinkSchedule dialogSort = DialogSkatingRinkSchedule.newInstance(currentItem);
dialogSort.show(((AppCompatActivity)v.getContext()).getSupportFragmentManager(), "SortDialog");
});
Ну и потом в методе onCreateView вашего фрагмента DialogSkatingRinkSchedule:
ItemSkatingRinkSchedule item = getArguments.getSerializable("item");
Ну и берите от этого объекта что хотите и вставляйте куда вам угодно.