- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图显示一个自定义对话框,根据我在调用确认对话框 .show() 方法时传递的参数,会弹出此运行时错误。
错误日志是:
04-16 09:45:03.148: E/AndroidRuntime(13540): FATAL EXCEPTION: main
04-16 09:45:03.148: E/AndroidRuntime(13540): Process: com.moymer, PID: 13540
04-16 09:45:03.148: E/AndroidRuntime(13540): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.view.ViewRootImpl.setView(ViewRootImpl.java:554)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:259)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.app.Dialog.show(Dialog.java:286)
04-16 09:45:03.148: E/AndroidRuntime(13540): at com.moymer.fragments.AmigosFragmentNovo.showDialogDesfazerAmizade(AmigosFragmentNovo.java:2006)
04-16 09:45:03.148: E/AndroidRuntime(13540): at com.moymer.fragments.AmigosFragmentNovo$12.onItemLongClick(AmigosFragmentNovo.java:959)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.widget.AbsListView.performLongPress(AbsListView.java:2979)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:2928)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.os.Handler.handleCallback(Handler.java:733)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.os.Handler.dispatchMessage(Handler.java:95)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.os.Looper.loop(Looper.java:136)
04-16 09:45:03.148: E/AndroidRuntime(13540): at android.app.ActivityThread.main(ActivityThread.java:5086)
04-16 09:45:03.148: E/AndroidRuntime(13540): at java.lang.reflect.Method.invokeNative(Native Method)
04-16 09:45:03.148: E/AndroidRuntime(13540): at java.lang.reflect.Method.invoke(Method.java:515)
04-16 09:45:03.148: E/AndroidRuntime(13540): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785)
04-16 09:45:03.148: E/AndroidRuntime(13540): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601)
04-16 09:45:03.148: E/AndroidRuntime(13540): at dalvik.system.NativeStart.main(Native Method)
这是在我的 Controller 上设置对话框的方法。
public void showDialogDesfazerAmizade(Usuario usuarioRemoverAdapter)
{
usuarioRemover = usuarioRemoverAdapter;
confirmacaoDesfazerAmizade = new Confirmacao(superContext,
"Você deseja mesmo desfazer amizade com", "Desfazer amizade",
usuarioRemover.getNome().toString());
confirmacaoDesfazerAmizadeBtns = new ConfirmacaoBtns()
{
@Override
public void positiveBtnClicked()
{
if (usuarioLogado != null
&& usuarioLogado.getIdmoymer() != null
&& usuarioRemover != null
&& usuarioRemover.getIdmoymer() != null)
{
RemoveAmigoAsyncTask removeAmigoAsyncTask = new RemoveAmigoAsyncTask(
AmigosFragmentNovo.this, superContext, 0,
usuarioLogado.getIdmoymer(),
usuarioRemover.getIdmoymer(), usuarioRemover);
removeAmigoAsyncTask
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
listaAsyncTasks.add(removeAmigoAsyncTask);
}
}
@Override
public void negativeBtnClicked()
{
if (confirmacaoDesfazerAmizade != null
&& confirmacaoDesfazerAmizade.isShowing())
{
confirmacaoDesfazerAmizade.dismiss();
}
}
};
confirmacaoDesfazerAmizade
.setBtnsControl(confirmacaoDesfazerAmizadeBtns);
if (confirmacaoDesfazerAmizade != null
&& !confirmacaoDesfazerAmizade.isShowing())
{
confirmacaoDesfazerAmizade.show();
}
}
这是确认自定义对话框。
public class Confirmacao extends Dialog implements android.view.View.OnClickListener {
public Context c;
public Dialog d;
public LinearLayout acaoLL, cancelarLL, perguntaLL;
private String pergunta;
private String perguntaBold;
private String tituloAcao;
private ConfirmacaoBtns btnsControl;
private TextView acaoTV;
private TextView perguntaTV;
private TextView pergunta_boldTV;
public Confirmacao(Context context, String pergunta, String tituloAcao)
{
super(context);
this.tituloAcao = tituloAcao;
if(pergunta != null)
this.pergunta = pergunta;
this.c = context;
}
public Confirmacao(Context context, String pergunta, String tituloAcao, String perguntaBold)
{
super(context);
this.tituloAcao = tituloAcao;
if(pergunta != null)
this.pergunta = pergunta;
if(perguntaBold != null)
this.perguntaBold = perguntaBold;
this.c = context;
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.confirmacao);
getWindow().setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));
acaoLL = (LinearLayout) findViewById(R.id.confirmacao_acao);
cancelarLL = (LinearLayout) findViewById(R.id.confirmacao_cancelar);
perguntaLL = (LinearLayout) findViewById(R.id.pergunta_layout);
Typeface openSansRegular = Typeface.createFromAsset(c.getAssets(), Font.OPENSANS_REGULAR);
Typeface openSansBold = Typeface.createFromAsset(c.getAssets(), Font.OPENSANS_BOLD);
acaoTV = (TextView)findViewById(R.id.confirmacao_acao_tv);
acaoTV.setTypeface(openSansRegular);
perguntaTV = (TextView)findViewById(R.id.pergunta);
perguntaTV.setTypeface(openSansRegular);
pergunta_boldTV = (TextView) findViewById(R.id.pergunta_bold);
if(perguntaBold != null)
{
pergunta_boldTV.setTypeface(openSansRegular);
pergunta_boldTV.setText(Html.fromHtml("<b>" + (perguntaBold) + "</b>" + "?"));
}else
pergunta_boldTV.setVisibility(View.GONE);
acaoTV.setTypeface(openSansRegular);
perguntaTV.setTypeface(openSansRegular);
if(this.tituloAcao!=null)
acaoTV.setText(this.tituloAcao);
if(this.pergunta!=null)
perguntaTV.setText(this.pergunta);
else
perguntaLL.setVisibility(View.GONE);
acaoLL.setOnClickListener(this);
cancelarLL.setOnClickListener(this);
showDialogOnScreenBottom();
}
private void showDialogOnScreenBottom() {
Window window = getWindow();
WindowManager.LayoutParams wlp = window.getAttributes();
wlp.width = LayoutParams.MATCH_PARENT;
wlp.height = LayoutParams.MATCH_PARENT;
wlp.gravity = Gravity.BOTTOM;
wlp.flags &= ~WindowManager.LayoutParams.FLAG_DIM_BEHIND;
window.setAttributes(wlp);
}
public void setBtnsControl(ConfirmacaoBtns btnsControl)
{
this.btnsControl = btnsControl;
}
@Override
public void onClick(View v)
{
switch (v.getId()) {
case R.id.confirmacao_acao:
{
if(btnsControl!=null)
btnsControl.positiveBtnClicked();
dismiss();
break;
}
case R.id.confirmacao_cancelar:
{
if(btnsControl!=null)
btnsControl.negativeBtnClicked();
dismiss();
break;
}
default:
break;
}
dismiss();
}
public void negativeButtonGone()
{
cancelarLL.setVisibility(View.GONE);
}
public interface ConfirmacaoBtns
{
public void positiveBtnClicked();
public void negativeBtnClicked();
}
}
最佳答案
正如 Fede Bucich 和 Don Chakkappan 回答的那样,问题是上下文,但不可能通过名称“ActivityName.this”来引用 Activity ,因为该方法在 fragment 中。所以正确的答案是使用 getActivity() 而不是 Context:
confirmacaoDesfazerAmizade = new Confirmacao(getActivity(),
"Você deseja mesmo desfazer amizade com", "Desfazer amizade",
usuarioRemover.getNome().toString());
关于android - 自定义 Dialog.show() 上的 BadTokenException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29675225/
使用的浏览器 - Chrome 67.0.3396.99 我创建了一个 DialogsModule它有一个组件 ConfirmDialog.component.ts使用以下模板 confirm-dia
我一直在尝试制作一个简单的程序来使用Electron创建和读取文件。 到目前为止,我已经尝试了很多,并且似乎没有提供与dialog.showOpenDialog一起提供的回调函数。 dialo
我有一个登录对话框,想防止它在按下回车键时自动关闭。 更具体地说,当用户输入凭据并按下回车键时,凭据的响应返回错误,我希望对话框保留(这样我就可以向他们显示一些错误消息,让用户再试一次) . 这就是我
Jquery对话框的含义是什么:它是单独的网页还是网页的一部分? (我不太了解 Jquery)。 谢谢 最佳答案 jQuery 对话框将出现在页面上方,但它实际上是当前页面的一部分。当您加载对话框时,
当用户退出 xe:dialog 时,我需要做一些清理工作。我将代码放在 onUnload 事件中,如下所示: viewScope.remove("vsSomeVariable"); viewScope
我想相对于我的 html 元素之一定位 Dojo 的 Dijit 对话框。是否可以? 如是。如何? 目前它总是在视口(viewport)中间显示对话框。 有人可以帮我解决这个问题吗? 谢谢。 amar
即使属性设置为“openDirectory”,是否也可以在 showOpenDialog 中显示文件?当然,文件不应该是可选的,但可能会显示为灰色。所以用户知道他选择了正确的目录。在 OSX 上一切正
如何使用 android 标准组件 Bottom Sheet 单实现以下设计功能: 出现 Bottom Sheet 对话框片段时的图像: 用户向上滚动以查看内容底部时的图像: 我将使用 ViewPag
我刚开始使用对话框,我非常喜欢在资源文件中定义布局的可能性。但是是否可以设置一个对话框并将其嵌入到另一个对话框中(即没有 float 对话框)? 对于普通窗口,我创建了一个带有一个子窗口的主窗口。然后
我正在尝试更改 dialog 的背景颜色元素的 backdrop使用自定义 CSS 属性,但不需要。这是 Chrome 中的错误还是有原因? document.querySelector('dialo
我有一个 Electron 应用程序。如果我通常使用dialog.showmessageBoxSync,则必须等待用户输入。选项为:关闭,取消或确定。 它工作正常,但是如果我在对话框外部(应用程序内的
我有一个启动确认对话框的 View ,但代码不是等待对话框返回结果,而是直接跳转到 promise 的“then”部分。请参阅下面的代码: ConfirmDialog.ts import { inje
我有一个启动确认对话框的 View ,但代码不是等待对话框返回结果,而是直接跳转到 promise 的“then”部分。请参阅下面的代码: ConfirmDialog.ts import { inje
我正在使用 MonoTouch.Dialog 的 OwnerDrawnElement,但它似乎不允许用户在触摸屏幕时“突出显示”单元格。我查看了示例,但它没有显示突出显示。有什么建议么? 我注意到 T
此选择器在 http://jqueryui.com/demos/dialog/#modal-confirmation 中引用(源代码)。 $( "#dialog:ui-dialog" ).dialog
我有一个奇怪的问题。当 Activity 开始时,我会显示一个对话框,说明某些项目正在加载,如下所示: Dialog dialog; @Override public void onCreate(Bu
jquery-ui 中 .dialog("close") 和 .dialog("destroy") 有什么区别? 我有一个脚本,以前的开发人员使用了 .dialog("destroy") 但现在我必须
我正在使用 Acengage (Ad4Push),我想自定义它的对话框。 Acengage 团队说可以使用自定义主题更改对话框样式,我做到了。我可以更改 textSize、textColor、wind
我有一个标准 View ,顶部有一个导航栏。我还在它自己的源文件中设置了一个 Monotouch.Dialog。我四处寻找解决方案,但似乎找不到关于如何将 MTD 添加到普通 View 的明确答案。
我试图从一个打开的 md-dialog 中打开一个 md-dialog,但问题是第一个 md-dialog 在第二个打开时关闭了 // the controller of the first popU
我是一名优秀的程序员,十分优秀!