не запускается dialog в android
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
switch(id) {
case R.id.menu_item_add_photo:
return true;
case R.id.menu_item_remove_dirs:
return true;
case R.id.menu_item_add_photo_for_sorting:
Intent intentShowDialogForSorting = new Intent("com.xverizex.sort_photo.DialogAddForSorting");
intentShowDialogForSorting.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intentShowDialogForSorting);
return true;
default:
break;
}
return super.onOptionsItemSelected(item);
}
почему то intent не запускается. вот код DialogAddForSorting.
package com.xverizex.sort_photo;
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import androidx.annotation.NonNull;
public class DialogAddForSorting extends Dialog {
public DialogAddForSorting(@NonNull Context context) {
super(context);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.dialog_for_sorting);
}
}
в чем прикол, так это что такой способ диалога описан в книге "сборник рецептов для android". я почитал немного на официальном сайте и понял что чтобы запустить intent, он должен быть прописан в манифесте. но dialog не прописывается в манифесте, как бы нет автодополнения, значит не примет. и поэтому об этом не написано в книге, странно.
Ответы (1 шт):
Вы запускаете диалог а не активность, поэтому использовать intent здесь не нужно. Вызвать диалог можно таким способом:
DialogAddForSorting dialog= new DialogAddForSorting(MainActivity.this);
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.show();
Вот есть туториал по вашему вопросу. Есть и другой способ показать кастомный диалог внутри активности, не создавая при этом кучи классов. Делается это так:
case R.id.menu_item_add_photo_for_sorting:final Dialog dialog = new
Dialog(MainActivity.this);
dialog.setContentView(R.layout.dialog_for_sorting);
dialog.show();
чтобы добраться до какого-то элемента разметки, нужно его инициализировать через диалог:
Button declineButton = (Button) dialog.findViewById(R.id.btn_cancel);
declineButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Close dialog
dialog.dismiss();
}
});
Лично я использую второй вариант, так как он проще и не нужно создавать классы поддержки.