在extends Preference的类中加dialog.show(getFragmentManager(), "dialog");
时间: 2024-03-27 07:39:10 浏览: 11
如果您的 Preference 类继承自 PreferenceFragmentCompat,并且您希望在其中显示一个对话框,则可以使用如下代码:
```
DialogFragment dialog = new YourDialogFragment();
dialog.show(getParentFragmentManager(), "dialog");
```
在这里,我们使用 getParentFragmentManager() 方法而不是 getFragmentManager() 方法,因为 PreferenceFragmentCompat 是使用 getChildFragmentManager() 管理其子 Fragment 的。因此,您需要使用 getParentFragmentManager() 方法来获取正确的 FragmentManager。
请注意,您需要将 YourDialogFragment 替换为您自己的对话框片段类。并且,如果您的 Preference 类不是继承自 PreferenceFragmentCompat,则您需要使用适当的 FragmentManager 方法来获取 FragmentManager。
相关问题
PhoenixPermissionControlPreference extends Preference如何实现与dialog.show(getFragmentManager(), "dialog");相同效果的show
如果您的 PhoenixPermissionControlPreference 类继承自 Preference,则可以使用如下代码在其中显示一个对话框:
```
DialogFragment dialog = new YourDialogFragment();
dialog.show(((FragmentActivity) getContext()).getSupportFragmentManager(), "dialog");
```
在这里,我们使用 getSupportFragmentManager() 方法来获取 FragmentManager。请注意,我们先将 getContext() 方法的返回值转换为 FragmentActivity,然后再调用 getSupportFragmentManager() 方法来获取正确的 FragmentManager。
请注意,您需要将 YourDialogFragment 替换为您自己的对话框片段类。
Can not perform this action after onSaveInstanceState报错 dialog.show
这个错误通常是由于在 `onSaveInstanceState` 方法后尝试调用 `show()` 方法所引起的。在 `onSaveInstanceState` 方法被调用时,Activity 正在保存其状态,这时候弹出一个对话框可能会导致一些异常情况发生。你可以尝试将弹出对话框的代码移动到 `onCreate` 方法中或者使用 `DialogFragment` 来解决这个问题。`DialogFragment` 可以在屏幕旋转等情况下保持对话框的状态。
例如,你可以这样创建一个 `DialogFragment`:
```java
public class MyDialogFragment extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 创建并返回对话框视图
return inflater.inflate(R.layout.my_dialog_layout, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// 在此处执行对话框初始化操作
// 例如设置对话框标题、内容、按钮事件等
}
}
```
然后,在需要弹出对话框的地方,你可以这样调用:
```java
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getSupportFragmentManager(), "my_dialog");
```