对DialogFragment执行ActionBar操作

Saa*_*ooq 8 android android-dialogfragment dialogfragment android-actionbar-compat

我有一个DialogFragment风格全屏使用setStyle(STYLE_NORMAL, R.style.Theme_App).

DialogFragment精细显示,但后续行动(在homeAsUp在动作条的动作)不起作用.我尝试onOptionsItemSelected在实施中,DialogFragment但它永远不会被调用.

有没有办法在DialogFragment中获取up动作回调,所以我可以解雇它?作为参考,我正在使用ActionBarCompat.

She*_*lji 17

这是不可能的,但有一个使用a的解决方法Toolbar.现在您可以包含Toolbar作为您的一部分,DialogFragment layout xml并可以根据您的需要设置其设计/图标.setNavigationOnClickListener如果您希望后退按钮的行为与正常情况一样,您还需要实现.请参阅下面的示例类.

package com.package.name;

import android.app.Dialog;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.DialogFragment;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;



public class MyDialogFragment extends DialogFragment {
    private View parentView;
    private Toolbar toolbar;


    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        setStyle(DialogFragment.STYLE_NO_FRAME, R.style.Theme_AppCompat_NoActionBar);
        return super.onCreateDialog(savedInstanceState);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //The layout xml file contains the toolbar
        parentView = inflater.inflate(R.layout.dialogfragment_createpost, container, false);
        initView();
        initData();
        return parentView;
    }


    private void initView() {
        toolbar = (Toolbar) parentView.findViewById(R.id.toolbar);

    }

    private void initData() {
        toolbar.setTitle("Post");
        //Set naviagtion icon to back button drawable
        toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
// handle back button naviagtion
                dismiss();
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)


Rod*_*uin 12

有没有办法一个附加ActionBarDialogFragment,即使你可以设置的主题DialogFragment也不会注册为ActionBar它,Dialog.getActionBar()总是会返回null.

ActionBar您可以随时附加一个看似ActionBar的布局,并使用菜单设置其功能,而不是获取.

另一种方法是使用actionBar创建一个活动作为对话,你可以参考这篇文章

  • 不幸的是,这似乎是目前的正确答案 (2认同)