Ответ 1
Вы можете получить представления из Dialog
в onClick()
с помощью:
EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view);
У меня есть простая программа для отображения диалога с видом edittext в нем и прослушивания положительных/отрицательных кнопок, для выполнения пользовательского действия в каждом (прочитайте этот edittext и сохраните его содержимое в переменной активности).
Проблема возникает, когда я не вижу способа восстановить текущий диалог из диалогового интерфейса (а затем я не могу восстановить какой-либо вид в диалоговом окне).
Возможно, это вопрос noob, но после некоторых поисковых запросов Google я не могу ответить на него.
Мой код следующий
LayoutInflater li = LayoutInflater.from(this);
View myView = li.inflate(R.layout.my_layout, null);
AlertDialog.Builder cDialog = new AlertDialog.Builder(this);
cDialog.setView(myView);
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//here the code to retrieve dialog
}
});
cDialog.create();
Есть ли какие-нибудь подсказки о том, где я могу это найти?
Вы можете получить представления из Dialog
в onClick()
с помощью:
EditText edit = (EditText) ((AlertDialog) dialog).findViewById(R.id.the_id_of_view);
Этот путь отлично работает в моем коде:
public void onClick(DialogInterface dialog, int which) {
Dialog dialog2 =Dialog.class.cast(dialog);
EditText edit = (EditText) dialog2.findViewById(R.id.myedittext);
}
веселит
У вас уже есть ссылка на представление, в котором есть текст редактирования. Почему бы не использовать его напрямую? Просто убедитесь, что вы сделали окончательный вид, чтобы получить доступ к нему в анонимном классе OnClickListener
.
LayoutInflater li = LayoutInflater.from(this);
final View myView = li.inflate(R.layout.my_layout, null);
// don't forget to mark myView as final
AlertDialog.Builder cDialog = new AlertDialog.Builder(this);
cDialog.setView(myView);
cDialog.setPositiveButton(R.string.start_download, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//here the code to retrieve dialog
EditText edit = (EditText) myView.findViewById(R.id.the_id_of_view);
}
});
cDialog.create();
Вы можете получить Диалог, возвращенный из метода show()
alertBuidler.
AlertDialog.Builder adb = new AlertDialog.Builder(YourActivity.this);
//...code to add methods setPositive an setNegative buttons
Вызвать show()
метод adb
и получить Dialog
, как показано ниже:
final AlertDialog dialog = adb.show();
Таким образом, вы можете вызвать любую кнопку своего диалога в любой точке кода в своей деятельности:
dialog.getButton(DialogInterface.BUTTON_POSITIVE).performClick();//or
dialog.getButton(DialogInterface.BUTTON_NEGATIVE).performClick();//or
dialog.getButton(DialogInterface.BUTTON_NEUTRAL).performClick();
Вы можете получить экземпляр диалога с помощью следующего кода:
val builder = AlertDialog.Builder(this)
builder.setMessage(R.string.eneter_url_message)
.setView(R.layout.input_dialog)
.setPositiveButton(R.string.OK) { dialog, _ -> validateUrl(dialog) }
.setNegativeButton(R.string.CANCEL) { dialog, _ -> dialog.dismiss() }
val dialog = builder.create()
dialog.show()
urlInput = dialog.findViewById(R.id.urlInput)
Как только вы вызываете dialog.show(), вы можете найти любые завышенные представления с помощью findViewById