2015-04-27 4 views
2

У меня есть список видео, записанных пользователем в моем приложении. Когда пользователь долго щелкает по имени видео в ListView, появляется диалоговое окно, чтобы предоставить пользователю следующие параметры: «Воспроизвести», «Переименовать», «Удалить». Воспроизведение вызывает выбор видеопроигрывателя для воспроизведения видео. Работает так, как должно. Удалить вызывает другое диалоговое окно для подтверждения того, что пользователь хочет удалить видео. Также работает так, как должно. При щелчке по переименованию предполагается, что другой пользовательский интерфейс AlertDialog содержит EditText, чтобы пользователь мог переименовать видео.AlertDialog.Builder: setView; пользовательский вид не отображается

Вот XML для настраиваемого представления, установленного для переименования AlertDialog:

<?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, I настройки пользовательского вида и 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 показывает вверх, это имеет значок, заголовок, сообщение и кнопки, но не пользовательский вид.

+1

в вашем xml id edittext is etRename, но в вашем коде указано R.id.etFilename. ты это проверил? – MilanNz

+0

Не проблема, но хороший глаз. Определенно вызвало бы проблемы позже. У меня есть другое представление с помощью EditText, используя это имя, поэтому Eclipse не произнесла ошибку. –

ответ

0

Из 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() помогает.

+0

adRename - это нулевой объект перед цепочкой строителей, поэтому при попытке выполнить это в 'NullPointerException' при попытке вызвать' findViewById() 'в adRename. Кроме того, я не хочу показывать диалог в точке, где происходит цепочка; просто инициализируйте диалог, чтобы он был готов к использованию, поэтому изменение 'create()' to 'show()' не будет хорошим. –

0

Невозможно найти источники прямо сейчас, но, пожалуйста, попробуйте удалить этот вызов setMessage() из цепочки (и, вероятно, заголовок и значок, связанные также).

Во-первых, это не имеет смысла, поскольку вы предоставляете свой собственный макет. Во-вторых, этот вызов может фактически блокировать использование пользовательского представления.

+0

Я пробовал это только с помощью 'setView()' и 'create()' в цепочке, и он все еще не работает. В этом случае экран темнеет, и ничего не видно. –

+1

@AdamKomar вы уверены, что в середине экрана нет маленьких букв '@ string/hint_rename'? :) Возможно, вы ничего не видите, потому что оба ваших взгляда прозрачны. В любом случае подсказка edittext должна быть видна. Попробуйте добавить 'android: background' в рамку. – AndroidEx

+0

Мне нравится мышление вне коробки. К сожалению, похоже, это не так. Я установил 'android: background =" @ android: color/black "' и даже установил etRename с помощью 'android: textColor =" @ android: color/white "', чтобы убедиться, что они контрастируют и все еще ничего. Он отображается в предварительном просмотре графического макета в Eclipse, но ничего не работает, когда приложение работает. Все равно оставим эти настройки на всякий случай. @ Android777 –

Смежные вопросы