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

时间:2015-04-27 21:33:10

标签: android android-custom-view android-alertdialog

我有一个用户在我的应用中录制的视频列表。当用户在ListView中长按视频的名称时,会弹出一个对话框,为用户提供以下选项:播放,重命名,删除。 Play会为视频播放器播放视频播放器。按预期工作。删除会打开另一个对话框,以确认用户是否要删除该视频。也可以正常工作。单击重命名时,它应该显示另一个包含自定义视图中的EditText的AlertDialog,以允许用户重命名视频。

这里是重命名AlertDialog的自定义视图集的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>

在onCreate中,我设置了自定义视图和AlertDialog:

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显示时,它有图标,标题,消息和按钮,但不是自定义视图。

2 个答案:

答案 0 :(得分:1)

来自AlertDialog文档:

  

如果要显示更复杂的视图,请查看名为“custom”的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()是否有帮助。

答案 1 :(得分:0)

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

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