Android Studio: как закрыть фрагмент диалога из окна просмотра (адаптер. java), размещенного во фрагменте - PullRequest
0 голосов
/ 03 мая 2020

У меня есть фрагмент диалога в обзоре переработчика, который работает нормально. Проблема в том, что я не могу закрыть его после того, как пользователь выбрал одну из опций из фрагмента диалога (во фрагменте диалога есть еще одно представление переработчика, заполняющее его, щелкнув по элементу которого я хочу что-то сделать, и закройте фрагмент диалога). Есть частичные ответы, но ничего не закончено.

Спасибо за обзор Fragment> RecyclerView> Dialog Fragment> RecyclerView с параметрами меню

При нажатии на пункты меню я хочу закрыть фрагмент диалога.

Ниже приведен код адаптера, откуда я вызываю событие щелчка в представлении:

public class ContextMenuAdapter extends RecyclerView.Adapter<ContextMenuAdapter.contextMenuViewHolder> {

ArrayList<ContextMenuModel> contextMenuList;
Context contextMenuContext;

public ContextMenuAdapter(ArrayList<ContextMenuModel> contextMenuList, Context contextMenuContext) {
    this.contextMenuList = contextMenuList;
    this.contextMenuContext = contextMenuContext;
}

@NonNull
@Override
public contextMenuViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View contextMenuView = LayoutInflater.from(contextMenuContext).inflate(R.layout.sample_context_menu_rv, parent, false);
    return new contextMenuViewHolder(contextMenuView);

}

@Override
public void onBindViewHolder(@NonNull final contextMenuViewHolder holder, int position) {

    ContextMenuModel accountFeedModelPosition = contextMenuList.get(position);
    holder.tvContextMenuOption.setText(accountFeedModelPosition.getMenuOption());

    // On Click Listener for the recycler view items.
    // 1. On Click menu option
    holder.tvContextMenuOption.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(contextMenuContext, "Clicked"+ holder.tvContextMenuOption.getText(), Toast.LENGTH_SHORT).show();
        }
    });
}

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

public class contextMenuViewHolder extends RecyclerView.ViewHolder{

    TextView tvContextMenuOption;

    public contextMenuViewHolder(@NonNull View itemView) {
        super(itemView);
        tvContextMenuOption = itemView.findViewById(R.id.tvContextMenuOption);
    }
}

}

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Наконец-то добился этого, следуя этому сообщению: Как отключить фрагмент диалога из адаптера просмотра повторного просмотра

Решение:

  1. В адаптере. java добавить в адаптер конструктор, получающий DialogFragment.

    ArrayList contextMenuList; Context contextMenuContext; DialogFragment cmDialogFrag; // Для этой цели

    publi c ContextMenuAdapter (ArrayList contextMenuList, Context contextMenuContext, DialogFragment cmDialogFrag) {this.contextMenuList = contextMenuList; this.contextMenuContext = contextMenuContext; this.cmDialogFrag = cmDialogFrag; // Для этого}

  2. При создании Адаптера в действии. java или его фрагмент. java передать значение для конструктора, созданного на шаге 1, например:

    ContextMenuAdapter myCMAdapter = new ContextMenuAdapter (contextMenuList, getActivity (), ContextMenuFragment.this);

Здесь последний из них, т.е. ContextMenuFragment.this, будет передан конструктору, созданному на шаге 1.

В вызове представления onClick of recycler:

cmDialogFrag.dismiss ();

0 голосов
/ 03 мая 2020

Если у вас есть ссылка на фрагмент диалога, вы можете сделать это, используя dismiss() непосредственно в DialogFragment.

из документации :

public void dismiss ():

Отключить фрагмент и его диалоговое окно. Если фрагмент был добавлен в задний стек, все заднее состояние стека вплоть до этой записи будет включено. В противном случае новая транзакция будет принята для удаления фрагмента.

...