gpt4 book ai didi

android - 对话框 onCreateDialog(int dialogID)

转载 作者:太空狗 更新时间:2023-10-29 12:50:16 26 4
gpt4 key购买 nike

为了创建对话框,我覆盖了以下方法:

protected Dialog onCreateDialog(final int dialogId) {
}

为了调用它,我正在使用:

showDialog(id);

但是现在我想使用FragmentDialog,但是没有像这样的方法:

protected Dialog onCreateDialog(final int dialogId) {
}

Dialog onCreateDialog(Bundle savedInstanceState){}

我的问题是,如何在 FragmentDialog 中显示基于不同 id 的对话框。

最佳答案

我猜 FragmentDialog 是指在 Fragment 中显示对话框而不是 DialogFragment

但是您可以像这样在 Fragment 中复制此行为:

class SomeFragment extends Fragment{

HashMap<Integer, Dialog> mDialogs = new HashMap<Integer, Dialog>();

public void showDialog(int dialogId){

Dialog d = mDialogs.get(dialogId);
if (d == null){

d = onCreateDialog(dialogId);
mDialogs.put(dialogId, d);
}
if (d != null){
onPrepareDialog(d, dialogId);
d.show();
}

}

public Dialog onCreateDialog(int dialogId){
//just create your Dialog here, once
}

public void onPrepareDialog(Dialog d, int dialogId){
super.onPrepareDialog(d, dialogId);
// change something inside already created Dialogs here
}
}

它只是一个简单的Dialogs缓存

编辑: Activity 的原始来源:

/**
* Show a dialog managed by this activity. A call to {@link #onCreateDialog(int)}
* will be made with the same id the first time this is called for a given
* id. From thereafter, the dialog will be automatically saved and restored.
*
* Each time a dialog is shown, {@link #onPrepareDialog(int, Dialog)} will
* be made to provide an opportunity to do any timely preparation.
*
* @param id The id of the managed dialog.
*
* @see Dialog
* @see #onCreateDialog(int)
* @see #onPrepareDialog(int, Dialog)
* @see #dismissDialog(int)
* @see #removeDialog(int)
*/
public final void showDialog(int id) {
if (mManagedDialogs == null) {
mManagedDialogs = new SparseArray<Dialog>();
}
Dialog dialog = mManagedDialogs.get(id);
if (dialog == null) {
dialog = createDialog(id, null);
mManagedDialogs.put(id, dialog);
}

onPrepareDialog(id, dialog);
dialog.show();
}

/**
* Provides an opportunity to prepare a managed dialog before it is being
* shown.
* <p>
* Override this if you need to update a managed dialog based on the state
* of the application each time it is shown. For example, a time picker
* dialog might want to be updated with the current time. You should call
* through to the superclass's implementation. The default implementation
* will set this Activity as the owner activity on the Dialog.
*
* @param id The id of the managed dialog.
* @param dialog The dialog.
* @see #onCreateDialog(int)
* @see #showDialog(int)
* @see #dismissDialog(int)
* @see #removeDialog(int)
*/
protected void onPrepareDialog(int id, Dialog dialog) {
dialog.setOwnerActivity(this);
}



/**
* Callback for creating dialogs that are managed (saved and restored) for you
* by the activity.
*
* If you use {@link #showDialog(int)}, the activity will call through to
* this method the first time, and hang onto it thereafter. Any dialog
* that is created by this method will automatically be saved and restored
* for you, including whether it is showing.
*
* If you would like the activity to manage the saving and restoring dialogs
* for you, you should override this method and handle any ids that are
* passed to {@link #showDialog}.
*
* If you would like an opportunity to prepare your dialog before it is shown,
* override {@link #onPrepareDialog(int, Dialog)}.
*
* @param id The id of the dialog.
* @return The dialog
*
* @see #onPrepareDialog(int, Dialog)
* @see #showDialog(int)
* @see #dismissDialog(int)
* @see #removeDialog(int)
*/
protected Dialog onCreateDialog(int id) {
return null;
}

关于android - 对话框 onCreateDialog(int dialogID),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12818342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com