Android - Вызвать notifydatasetchanged () из диалога внутри фрагмента - PullRequest
0 голосов
/ 06 мая 2020

У меня есть RecyclerView внутри фрагмента. Этот же фрагмент также содержит Dialog. Когда вы открываете диалоговое окно, новые данные добавляются в RecylerView под этим диалоговым окном.

Моя цель

Я хочу вызвать notifydatasetchanged() из диалогового окна, чтобы когда я закрываю диалоговое окно, вновь добавленные данные должны отражаться в RecyclerView

Что я пробовал?

Я пытался использовать для этого интерфейсы. Мой текущий подход выглядит так:

My Dialog class

public class DialogRitual extends Dialog {
AdapterUpdater adapterUpdater = null;
Button gotit;
Activity c;

public interface AdapterUpdater {
    void onDataUpdated();
}

public DialogCreateNewRitual(@NonNull Context context) {
    super(context);
    this.c = (Activity) context;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.ritual_create_new);
    gotit = (Button) findViewById(R.id.createritualbutt);
    gotit.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
    // MORE DATA IS ADDED TO RECYCLER VIEW HERE
            adapterUpdater.onDataUpdated();
            dismiss();
        }
    });
}

My Fragment Class

public class Fragment_Home_Ritual extends Fragment implements DialogCreateNewRitual.AdapterUpdater {
private List<POJO_Rituals> mylist = new ArrayList<>();
private RecyclerView recyclerView;
public AdapteRitualsRecycler mAdapter;
Button createown;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    final View view = inflater.inflate(R.layout.fragment__home__ritual, container, false);
    createown = view.findViewById(R.id.opencreatedialog);
    recyclerView = (RecyclerView) view.findViewById(R.id.ritualsrecycler);
    ((Activity_Home)getActivity()).hideFABs();
    mAdapter = new AdapteRitualsRecycler(mylist);
    //ADAPTER POPULATION CODE HERE
    return view;

}

@Override
public void onDataUpdated() {
    mAdapter.notifyDataSetChanged();
}
}

Проблема?

Я получаю сообщение об ошибке:

Попытка вызвать метод интерфейса voidDialogs.DialogRitual $ AdapterUpdater.onDataUpdated () для ссылки на нулевой объект

...