(重複した)質問と回答がありますが、ほとんどすべてを通過して失敗しました。 thisの質問を参考に、私は最近いくつかの変更を加えました。Listen DialogFragment ViewPagerのイベントを却下します。フラグメント
概要:私のアプリでは、MainActivityはフラグメントビューポケットベルとFrangmentA、BとCを保持しています.FrangmentAはDialogFragment CDialog onClikを表示します。 CDialogを終了した後、ここでは起こっていないFragmentAのdoReload()を呼び出す必要があります。
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();
}
}
そして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
}
}
CDialogのonDismiss()では、あなたのアクティビティではなくあなたのフラグメントAを終了させるコールバックを引き起こしているようです。したがって、doReloadを呼び出すフラグメントへの参照を取得するか、アクティビティがフラグメントAのdoReleaodメソッドを呼び出すようにします。 – Luksprog