Android 当我从不同的活动中显示DialogFragment时,为什么我的DialogFragment样式是错误的?

Android 当我从不同的活动中显示DialogFragment时,为什么我的DialogFragment样式是错误的?,android,android-fragments,android-dialogfragment,android-styles,Android,Android Fragments,Android Dialogfragment,Android Styles,使用带有自定义视图的DialogFragment时,我面临一种奇怪的行为 当我从一个活动的另一个对话框中显示对话框时,一切正常,但当我从另一个片段(和不同的活动)中显示对话框时,样式混乱,我看不到SearchView、RecyclerView项装饰器以及其中文本视图的文本 对话框的代码: public class MyDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCr

使用带有自定义视图的DialogFragment时,我面临一种奇怪的行为

当我从一个活动的另一个对话框中显示对话框时,一切正常,但当我从另一个片段(和不同的活动)中显示对话框时,样式混乱,我看不到SearchView、RecyclerView项装饰器以及其中文本视图的文本

对话框的代码:

public class MyDialogFragment extends DialogFragment 
{
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState)
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.My_Dialog);

        LayoutInflater inflater = LayoutInflater.from(getContext());
        View view = inflater.inflate(R.layout.fragment_my, (ViewGroup) getActivity().findViewById(android.R.id.content), false);
        builder.setView(view);

        final SearchView searchView = (SearchView) view.findViewById(R.id.searchView);
        final RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
        recyclerView.setHasFixedSize(true);
        recyclerView.setAdapter(adapter);
        HorizontalDividerDecoration.Builder dividerBuilder = new HorizontalDividerDecoration.Builder(getContext());
        recyclerView.addItemDecoration(dividerBuilder.build());

        // ...

        builder.setNegativeButton(android.R.string.cancel, null);
        final AlertDialog dialog = builder.create();

        return dialog;
    }
}
fragment_my.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.SearchView
        android:id="@+id/searchView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </android.support.v7.widget.SearchView>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/searchView"
        android:scrollbarStyle="insideOverlay"
        app:layoutManager="LinearLayoutManager"
        tools:listitem="@layout/my_item"/>

</RelativeLayout>
ParentDialogFragment显示在ParentListFragment中

public class ParentListFragment extends Fragment
{
    // ...

    private void showSourceDialog(SourceEntity entity)
    {
        ParentDialogFragment dialog = ParentDialogFragment.newInstance(entity, new ParentDialogFragment.Callback()
        {
            // ...
        });
        dialog.show(getFragmentManager(), "parent_dialog");
    }
}
ParentListFragment是ParentListWizardActivity的内容,它只加载片段并具有以下样式:

<!-- AndroidManifest.xml -->
<activity android:name=".activity.ParentListWizardActivity"
    android:label="@string/title_activity_parent_list_wizard"
    android:theme="@style/AppTheme.NoActionBar">
</activity>


<!-- styles.xml -->
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="colorAccent">@color/secondary</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
MyWizardFragment由具有以下样式的活动WizardActivity注入:

<activity
    android:name=".activity.WizardActivity"
    android:label="@string/app_name"
    android:theme="@style/Theme.Intro">
</activity>

<style name="Theme.Intro" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

我不明白这是否与风格、片段管理器或任何其他东西有关


谢谢,我终于解决了我的问题

问题不在于AlertDialog,而在于自定义视图的样式,它显然不是从对话框继承的,而是您指定的

我替换了:

LayoutInflater inflater = LayoutInflater.from(getContext());
与:

像这样的回答:

现在一切都好了

<!-- AndroidManifest.xml -->
<activity android:name=".activity.ParentListWizardActivity"
    android:label="@string/title_activity_parent_list_wizard"
    android:theme="@style/AppTheme.NoActionBar">
</activity>


<!-- styles.xml -->
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primaryDark</item>
    <item name="colorAccent">@color/secondary</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>
public class MyWizardFragment extends ParallaxSlideFragment
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        View rootView = inflater.inflate(R.layout.fragment_my_wizard, container, false);

        actionButton = (Button) rootView.findViewById(R.id.actionButton);
        actionButton.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                MyDialogFragment dialog = MyDialogFragment.newInstance(preferenceManager.getDefaultCode(), new MyDialogFragment.Listener()
                {
                    @Override
                    public void select(MyBind item)
                    {
                        // ...
                    }
                });
                dialog.show(getFragmentManager(), "my_dialog");
            }
        });

        return rootView;
    }
}
<activity
    android:name=".activity.WizardActivity"
    android:label="@string/app_name"
    android:theme="@style/Theme.Intro">
</activity>

<style name="Theme.Intro" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
</style>
LayoutInflater inflater = LayoutInflater.from(getContext());
LayoutInflater inflater = LayoutInflater.from(new ContextThemeWrapper(getContext(), R.style.My_Dialog));