не запускается 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 шт):

Автор решения: Andrew

Вы запускаете диалог а не активность, поэтому использовать 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();
    }
});

Лично я использую второй вариант, так как он проще и не нужно создавать классы поддержки.

→ Ссылка