I am going to explain my problem as short as possible.
I have a Fragment called FragmentA which displays a DialogFragment after clicking on a specific button.
public class FragmentA extends Fragment implements OnClickListener {
...
@Override
public void OnClick(View v) {
if (v == dialogButton) {
showDialog();
}
}
public void showDialog() {
String diagName = getResources().getString(R.string.dialog_title);
MyDialog myDialog = MyDialog.newInstance(getFragmentAValue());
myDialog.show(getFragmentManager(), diagName);
}
}
public class MyDialog extends DialogFragment implements OnClickListener {
...
@Override
public void onClick(View view) {
if (view == acceptButton) {
...
}
else if (view == cancelButton) {
...
}
}
}
The dialog is dispalyed without any problem. But my problem consists in after myDialog is dismissed onResume()
method in FragmentA is never called and FragmentA is shown and you can interact with it without any problem.
public class FragmentA extends Fragment implements OnClickListener {
...
@Override
public void onResume() {
super.onResume();
resumeFragmentA();
}
}
So, what I have done in order to fix this issue is copying an instance of FragmentA in the end of onActivityCreated()
method and call the method resumeFragmentA()
when user has closed the dialog.
public class FragmentA extends Fragment implements OnClickListener {
FragmentA fragmentA = null;
...
@Override
public void onResume() {
super.onResume();
resumeFragmentA();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
...
fragmentA = this;
}
...
}
public class MyDialog extends DialogFragment implements OnClickListener {
...
@Override
public void onClick(View view) {
if (view == acceptButton) {
storeData();
dismissDialog();
}
else if (view == cancelButton) {
dismissDialog();
}
}
public void dismissDialog() {
FragmentA.fragmentA.resumeFragmentA();
dismiss();
}
}
I know this solution is tricky but I do not know to solve in a more brilliant way. Do you know it? Any Idea? Thanks in advance!
For a better reading of my code, here you have my full code:
public class FragmentA extends Fragment implements OnClickListener {
...
FragmentA fragmentA = null;
...
@Override
public void OnClick(View v) {
if (v == dialogButton) {
showDialog();
}
}
public void showDialog() {
String diagName = getResources().getString(R.string.dialog_title);
MyDialog myDialog = MyDialog.newInstance(getFragmentAValue());
myDialog.show(getFragmentManager(), diagName);
}
@Override
public void onResume() {
super.onResume();
resumeFragmentA();
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
...
fragmentA = this;
}
...
}
public class MyDialog extends DialogFragment implements OnClickListener {
...
static MyDialog newInstance(int value) {
MyDialog fragment = new MyDialog ();
Bundle args = new Bundle();
args.putInt("value", value);
fragment.setArguments(args);
return fragment;
}
@Override
public void onClick(View view) {
if (view == acceptButton) {
storeData();
dismissDialog();
}
else if (view == cancelButton) {
dismissDialog();
}
}
public void dismissDialog() {
FragmentA.fragmentA.resumeFragmentA();
dismiss();
}
...
}