Es gibt viele (doppelte) Fragen und Antworten zur Verfügung, ich ging fast alle von ihnen und scheiterte. Auf Anfrage von this Frage habe ich kürzlich einige Änderungen vorgenommen.Listen DialogFragment entlassen Ereignis von ViewPager Fragment
Kurz: MainActivity enthält in der App Fragment View Pager und FrangementA, B und C. FrangementA zeigt einen DialogFragment CDialog onClik. Nachdem ich CDialog abgelehnt habe, muss ich FragmentRoad() aufrufen, was hier nicht passiert.
MainActivity
protected void onCreate(Bundle savedInstanceState){
...
mSectionsPageAdapter = new FragmentAdapter(getSupportFragmentManager());
mViewPager = (ViewPager) findViewById(R.id.container);
setupViewPager(mViewPager);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
int defaultValue = 0;
int page = getIntent().getIntExtra("One", defaultValue);
mViewPager.setCurrentItem(page);
}
private void setupViewPager(ViewPager viewPager)
{
FragmentAdapter adapter = new
FragmentAdapter(getSupportFragmentManager());
adapter.addFragment(new FragmentA(), "FragA");
adapter.addFragment(new FragmentB(), "FragB");
adapter.addFragment(new FragmentC(), "FragC");
viewPager.setAdapter(adapter);
}
fragmenta
public class FragmentA extends Fragment implements CDialog.Dismissed{
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
...
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
FragmentManager fm = getActivity().getFragmentManager();
DialogFragment f = new CDialog();
f.show(fm, "CDialog");
}
});
@Override
public void dialogDismissed() {
Log.e(DFD_1, "dialogDismiss Called");// <-- This is not working*
doReload();
}
}
Und CDialogue
public class CDialog extends DialogFragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
....
return v;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
...
dfd_1.setOnClickListener(
new View.OnClickListener() {
public void onClick(View v) {
getDialog().dismiss(); //<--when this happens*
}
});
}
@Override
public void onDismiss(DialogInterface dialog) {
if (getActivity() != null && getActivity() instanceof Dismissed) {
((Dismissed) getActivity()).dialogDismissed();
}
super.onDismiss(dialog);
}
public interface Dismissed {
public void dialogDismissed(); //<-- FragmentA implements this
}
}
In CDialogs onDismiss() scheinst du den Dismissed Callback auf deiner Aktivität auszulösen und nicht dein Fragment A. Also nimm entweder einen Verweis auf das Fragment, auf dem du doReload aufrufen willst oder behalte den aktuelle Implementierung, aber die Aktivität rufen Sie die DoReleaod-Methode auf Fragment A. – Luksprog