我将尽可能简短地解释我的问题。
我有一个名为 FragmentA 的片段,它在单击特定按钮后显示一个 DialogFragment。
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) {
...
}
}
}
对话框显示没有任何问题。但是我的问题在于在 myDialog 被解除onResume()
之后 FragmentA 中的方法永远不会被调用并且 FragmentA 被显示并且您可以毫无问题地与之交互。
public class FragmentA extends Fragment implements OnClickListener {
...
@Override
public void onResume() {
super.onResume();
resumeFragmentA();
}
}
所以,为了解决这个问题,我所做的是在方法的末尾复制 FragmentA 的一个实例,并在用户关闭对话框时onActivityCreated()
调用该方法。resumeFragmentA()
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();
}
}
我知道这个解决方案很棘手,但我不知道以更出色的方式解决。你知道吗?任何想法?提前致谢!
为了更好地阅读我的代码,这里有我的完整代码:
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();
}
...
}