在我的应用程序中,我在viewpager中使用了一些片段。 我想在这样的片段中显示一个对话框:
final Dialog dialog = new Dialog(activity, R.style.DialogTheme);
dialog.show();
活动在onCreateView
中设置如下:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
activity = getActivity();
}
这是完美的工作,但在某些情况下,如果应用程序进入后台,并且用户回到应用程序,我在“dialog.show()
”行中收到错误“Fragment not attached to activity”
所以为了防止这个错误我使用这个:
if(!activity.isFinishing())
dialog.show();
else
Toast.makeText(activity, "Error", Toast.LENGTH_SHORT).show();
我认为这绝对不是最好的方式......
如果活动是完整的,甚至是更好的解决方案,是否有可能重新加载应用程序的解决方案?
答案 0 :(得分:0)
覆盖onAttach方法
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (activity instanceof YourActiivty) {
//here is your code
} else {
}
}
答案 1 :(得分:0)
public class MyFragment extends Fragment
@Override
public void setMenuVisibility(final boolean visible) {
super.setMenuVisibility(visible);
if (visible) {
...
}
}
答案 2 :(得分:0)
尝试使用DialogFragment而不是通过Dialog类显示对话框,它将为您提供更稳定的视图,只需通过" DialogFragment"
扩展您的课程public class DemoDialogFragment extends DialogFragment{
public DemoDialogFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView = inflater.inflate(R.layout.fragment_demo_dialog, container, false);
-----------
return rootView;
}
并在你的活动中使用函数来调用它
public void showDialogFrag(DialogFragment dialogFragment, String tag) {
dialogFragment.show(getSupportFragmentManager(), tag);
}
然后通过任何片段
调用此函数 ((MainActivity) getActivity()).showDialogFrag(new DemoDialogFragment(), Constant.FragmentTags.DemoDialogFragment);