java - Android SecondDialogFragment 未从 DialogFragment 显示

标签 java android dialog android-dialogfragment

我刚刚开始使用对话框 fragment ,有很多我不知道的事情。我有一个 MainActivity,通过单击按钮打开一个 DialogFragment,在 DialogFragment 中,我有另一个按钮可以打开 SecondDialogFragment。第一个工作正常,但第二个不行,我单击第一个 DialogFragment 中的按钮,屏幕失去了背景焦点,但什么也不显示。我实在不知道出了什么问题?如果有人能帮助我,我将不胜感激。

这是第一个 DialogFragment,我通过 onClick 调用第二个 DialogFragment

DialogFragment.java

 ImageButton iconButton = v.findViewById(R.id.user_icon);
            iconButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    new DSelectIcon().show(getFragmentManager(), "DSelectIcon");
                }
            });

SecondDialogFragment.java

public class DSelectIcon extends DialogFragment{

    private View v = null;

    private ImageView Selection;
    private static final Integer[] items = { R.drawable.image1,
            R.drawable.image1, R.drawable.image1,
            R.drawable.image1, R.drawable.image1,
            R.drawable.image1, R.drawable.image1,
            R.drawable.image1 };



    public DSelectIcon() {
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            // Restore last state for checked position.
        }
        LayoutInflater inflater = getActivity().getLayoutInflater();
        v = inflater.inflate(R.layout.grid_icon_event, null);
        return createDSelectIcon(v);
    }

    private AlertDialog createDSelectIcon(View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        Selection = v.findViewById(R.id.selection);
        GridView grid = v.findViewById(R.id.grid);
        // grid.setAdapter(new ArrayAdapter<Integer>(this, R.layout.cell,
        // items));
        grid.setAdapter(new CustomGridAdapter((MainActivity)getActivity(), items));
        grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                // TODO Auto-generated method stub
                Toast.makeText(getActivity(), "Clicked postion is" + i,
                        Toast.LENGTH_LONG).show();
                //Selection.setImageResource(items[arg2]);
            }
        });

        return builder.create();
    }

    public class CustomGridAdapter extends BaseAdapter {
        private Activity mContext;

        // Keep all Images in array
        public Integer[] mThumbIds;

        // Constructor
        public CustomGridAdapter(MainActivity mainActivity, Integer[] items) {
            this.mContext = mainActivity;
            this.mThumbIds = items;
        }

        @Override
        public int getCount() {
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int position) {
            return mThumbIds[position];
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView = new ImageView(mContext);
            imageView.setImageResource(mThumbIds[position]);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setLayoutParams(new GridView.LayoutParams(70, 70));
            return imageView;
        }

    }
}

Grid_icon_event.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/selection"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <GridView
        android:id="@+id/grid"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:columnWidth="100dip"
        android:gravity="center"
        android:horizontalSpacing="5dip"
        android:numColumns="auto_fit"
        android:stretchMode="columnWidth"
        android:verticalSpacing="40dip" >
    </GridView>

</LinearLayout>

最佳答案

已修复!!!

一个愚蠢的错误,但我忘了添加:

builder.setView(v);

SecondDialogFragment.java方法中createDSelectIcon

现在看起来像这样:

public class DSelectIcon extends DialogFragment{

    private View v = null;

    private ImageView Selection;
    private static final Integer[] items = { R.drawable.image1,
            R.drawable.image1, R.drawable.image1,
            R.drawable.image1, R.drawable.image1,
            R.drawable.image1, R.drawable.image1,
            R.drawable.image1 };



    public DSelectIcon() {
    }

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            // Restore last state for checked position.
        }
        LayoutInflater inflater = getActivity().getLayoutInflater();
        v = inflater.inflate(R.layout.grid_icon_event, null);
        return createDSelectIcon(v);
    }

    private AlertDialog createDSelectIcon(View v) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        Selection = v.findViewById(R.id.selection);
        GridView grid = v.findViewById(R.id.grid);
        // grid.setAdapter(new ArrayAdapter<Integer>(this, R.layout.cell,
        // items));
        grid.setAdapter(new CustomGridAdapter((MainActivity)getActivity(), items));
        grid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                // TODO Auto-generated method stub
                Toast.makeText(getActivity(), "Clicked postion is" + i,
                        Toast.LENGTH_LONG).show();
                //Selection.setImageResource(items[arg2]);
            }
        });

        builder.setView(v);


        return builder.create();
    }

    public class CustomGridAdapter extends BaseAdapter {
        private Activity mContext;

        // Keep all Images in array
        public Integer[] mThumbIds;

        // Constructor
        public CustomGridAdapter(MainActivity mainActivity, Integer[] items) {
            this.mContext = mainActivity;
            this.mThumbIds = items;
        }

        @Override
        public int getCount() {
            return mThumbIds.length;
        }

        @Override
        public Object getItem(int position) {
            return mThumbIds[position];
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView = new ImageView(mContext);
            imageView.setImageResource(mThumbIds[position]);
            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
            imageView.setLayoutParams(new GridView.LayoutParams(70, 70));
            return imageView;
        }

    }
}

关于java - Android SecondDialogFragment 未从 DialogFragment 显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46374568/

相关文章:

java - jmeter 测试计划导航 Pane 字体大小

java - Emacs java-mode : malabar, jdee,还是eclim?

android - 如何更改 Android 中的时钟频率?

android - 在微信/微信上关注某人的链接

java - 用于关闭对话框的按钮引发 nullpointerException

java - 密码 block 链接 : XOR implementation in Java

java - Android:无法获取要在 ListView 中显示的数据

Android 服务未在 ASUS Mobile 中运行

c++ - 在 C++ 中的窗口上接收挂起的拖放操作的通知

android - 如何通过单击单选按钮关闭带有单选按钮的对话框