Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android AlertDialog.Builder:setView;自定义视图不显示_Android_Android Custom View_Android Alertdialog - Fatal编程技术网

Android AlertDialog.Builder:setView;自定义视图不显示

Android AlertDialog.Builder:setView;自定义视图不显示,android,android-custom-view,android-alertdialog,Android,Android Custom View,Android Alertdialog,我有一个用户在我的应用程序中录制的视频列表。当用户在ListView中长时间单击视频名称时,会弹出一个对话框,为用户提供以下选项:播放、重命名、删除。播放为视频播放器打开一个选择器以播放视频。它本该起作用的。删除会弹出另一个对话框,确认用户是否要删除视频。它也能正常工作。单击“重命名”时,应该显示另一个AlertDialog,其中包含来自自定义视图的EditText,以便用户重命名视频 以下是重命名警报对话框的自定义视图集的XML: <?xml version="1.0" encoding

我有一个用户在我的应用程序中录制的视频列表。当用户在ListView中长时间单击视频名称时,会弹出一个对话框,为用户提供以下选项:播放、重命名、删除。播放为视频播放器打开一个选择器以播放视频。它本该起作用的。删除会弹出另一个对话框,确认用户是否要删除视频。它也能正常工作。单击“重命名”时,应该显示另一个AlertDialog,其中包含来自自定义视图的EditText,以便用户重命名视频

以下是重命名警报对话框的自定义视图集的XML:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/flRename"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <EditText
        android:id="@+id/etRename"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/hint_rename" />
</FrameLayout>
vRename   = getLayoutInflater().inflate(R.layout.rename, null);
etRename  = (EditText)vRename.findViewById(R.id.etRename);

adRename = new AlertDialog.Builder(context)
    .setIcon(R.drawable.ic_launcher)
    .setMessage("Rename video:")
    .setPositiveButton("Rename", dioclRename)
    .setNegativeButton("Cancel", null)
    .setTitle(getString(R.string.app_name))
    .setView(vRename)
    .create();
当AlertDialog显示时,它有图标、标题、消息和按钮,但没有自定义视图。

来自文档:

如果要显示更复杂的视图,请查找名为“自定义”的FrameLayout并将视图添加到其中:

FrameLayout fl = (FrameLayout) findViewById(android.R.id.custom);
fl.addView(myView, new LayoutParams(MATCH_PARENT, WRAP_CONTENT));
因此,也许可以打电话:

FrameLayout fl = (FrameLayout) adRename.findViewById(android.R.id.custom);
fl.addView(vRename, new LayoutParams(MATCH_PARENT, WRAP_CONTENT));

或者检查从
create()
切换到
show()
是否有帮助。

我现在无法查找源代码,但请尝试从链中删除此调用
setMessage()
(可能还有与标题和图标相关的调用)


首先,这是没有意义的,因为您提供了自己的布局。其次,此调用实际上可能会阻止自定义视图的使用。

在edittext的xml id中是etRename,但在代码中是R.id.etFilename。你检查过了吗?没问题,但是眼睛很好。以后肯定会出问题的。我有另一个视图,其中一个EditText使用了该名称,因此Eclipse没有向我抛出错误。我只使用链中的
setView()
create()
尝试了它,但仍然不起作用。在这种情况下,屏幕略微变暗,没有任何东西显示出来。@ AdamKomar,你确定在屏幕中部没有小代码“<代码> @ String / HythyReNeNe/Cuth>”吗?)也许,你什么也看不到,因为你的两个观点都是透明的。无论如何,edittext的提示应该是可见的。尝试将android:background添加到框架视图中。我喜欢跳出框框的思维方式。不幸的是,情况似乎并非如此。我设置了
android:background=“@android:color/black”
,甚至用
android:textColor=“@android:color/white”
设置了etRename,以确保它们的对比度仍然是零。它在Eclipse的图形布局预览中显示得很好,但在应用程序运行时什么都没有。还是要暂时离开那些设置以防万一@Android777@AdamKomar嗯,真奇怪。。。让我想一想。顺便问一下,你使用什么上下文<代码>活动,而不是
应用程序
?@AdamKomar您可以测试另一种解决方法:使用
对话框
而不是
警报对话框
,如下所示:
对话框名称=新建对话框(上下文);adRename.setContentView(vRename)。在我的项目中,我曾经通过用
Dialog
替换
AlertDialog
来解决一些问题。adRename在构建器链之前是一个空对象,因此在尝试调用adRename上的
findViewById()
时,尝试此操作会导致
NullPointerException
。另外,我不想在链发生的地方显示对话框;只需初始化对话框即可使用,因此将
create()
更改为
show()
将不太好。