gpt4 book ai didi

android - 在 Android 中使用 onPrepareDialog 方法中的 removeDialog() 刷新列表对话框

转载 作者:搜寻专家 更新时间:2023-11-01 08:14:06 24 4
gpt4 key购买 nike

在 onPrepareDialog 中调用 removeDialog(int) 是否被认为是错误的形式,如下所示,每次使用 showDialog() 调用时强制重新创建对话框:

@Override
public void onPrepareDialog(int id, Dialog dialog)
{
switch(id)
{
case REMOVE_WATCH_WORD :
removeDialog(REMOVE_WATCH_WORD);
break;

}
}

在 onCreateDialog 中我用这个 case 参数处理它:

case REMOVE_WATCH_WORD :
CustomHelper ch = new CustomHelper();
final CharSequence[] watchWordsCharSequence = ch.getWatchWordsAsCharSequence(getApplicationContext());

return new AlertDialog.Builder(ActivityName.this)

.setTitle("Remove Word from List")

.setItems(watchWordsCharSequence, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), "\"" + watchWordsCharSequence[item] + "\" removed from List!", Toast.LENGTH_SHORT).show();
String removeString = (String) watchWordsCharSequence[item];
SharedPreferences.Editor editor = watchWords.edit();
editor.remove(removeString);
editor.commit();
}
}).create();

强制对话框在每次调用时都重新绘制是否被认为是错误的形式?这样做有什么好处/坏处?

最佳答案

是的,我认为这种形式很糟糕。它甚至有效吗? onPrepareDialog() 即使在您第一次创建对话框后也会被调用,这意味着您选择在创建 对话框后立即删除 .我觉得有问题。

Activity 暴露了 showDialog()dismissDialog()onCreateDialog()onPrepareDialog() 系列方法能够有效地管理对话框的生命周期,特别是这样您就不必手动保留对对话框的引用。惯用的生命周期是您在 onCreateDialog() 中创建对话框,包括附加您需要的任何事件监听器。然后在 onPrepareDialog() 中初始化值,例如文本、初始值等——或者换句话说,“刷新”即将显示的对话框。应该没有理由破坏和重新创建显示之间的对话。与其使用 removeDialog() 来“刷新”它,您实际上应该研究如何正确刷新内容。通常这会涉及 .getAdapter().notifyDataSetInvalidated() 之类的东西,或者如果使用 CursorAdapter,调用 requery() 以强制它重新运行查询并更新适配器内容。

如果您确实发现您仍然需要删除并重新创建对话框,那么我会建议放弃整个Activity-managed dialog idiom,而是创建对话框当你需要它时调用它的 show() 方法。完成后,解散并排队等待 GC。这绕过了 Activity 公开的整个显示/创建/准备过程。

我建议坚持使用 Activity 管理的对话框,但如果您打算每次都删除该对话框则不建议这样做——在这种情况下只需实例化和 .show()

关于android - 在 Android 中使用 onPrepareDialog 方法中的 removeDialog() 刷新列表对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6474315/

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