首页 > 解决方案 > 创建弹出窗口

问题描述

我正在单击按钮时创建一个弹出窗口。但是,我在 getSupportFragmentManager(); 上遇到错误

public class PrizeList extends AppCompatDialogFragment {

    TextView players, prizePoolList, perKill, rank1, rank2, rank3;
    SeekBar seekBar;

    @NonNull
    @Override
    public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.prize_list_layout, null);
        builder.setView(view).setTitle("Prize List")
                .setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });

        players = view.findViewById(R.id.players);
        prizePoolList = view.findViewById(R.id.prizePoolList);
        perKill = view.findViewById(R.id.perKill);
        rank1 = view.findViewById(R.id.rank1);
        rank2 = view.findViewById(R.id.rank2);
        rank3 = view.findViewById(R.id.rank3);
        seekBar = view.findViewById(R.id.seekBar);

        return builder.create();
    }
}

适配器

holder.prizeList.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                openDialog();
                Toast.makeText(v.getContext(), "prize list clicked", Toast.LENGTH_SHORT).show();
            }
        });


    }

    private void openDialog() {
        PrizeList prizeList = new PrizeList();
        prizeList.show(prizeList.requireActivity().getSupportFragmentManager(), "Prize");
    }

我得到的错误,

E/AndroidRuntime:致命异常:主进程:com.luteraa.luteraaesports,PID:6355 java.lang.NullPointerException:尝试调用虚拟方法'androidx.fragment.app.FragmentManager androidx.fragment.app.FragmentActivity.getSupportFragmentManager()'在 com.luteraa.luteraaesports.BGMICategoryAdapter.access$000(BGMICategoryAdapter.java:25) 的 com.luteraa.luteraaesports.BGMICategoryAdapter$1 的 com.luteraa.luteraaesports.BGMICategoryAdapter.openDialog(BGMICategoryAdapter.java:93) 的空对象引用上。 onClick(BGMICategoryAdapter.java:76) at android.view.View.performClick(View.java:7191) at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) at android.view.View .performClickInternal(View.java:7164) 在 android.view.View.access$3500(View.java:821) 在 android.view.View$PerformClick.run(View.java:27856) 在 android.os.Handler.handleCallback(Handler.java:914) 在 android.os.Handler.dispatchMessage(Handler.java:100) 在 android.os.Looper.loop(Looper.java:224) 在 android。 app.ActivityThread.main(ActivityThread.java:7551) 在 java.lang.reflect.Method.invoke(Native Method) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 在 com。 android.internal.os.ZygoteInit.main(ZygoteInit.java:995)

标签: javaandroidandroid-studio

解决方案


  DataAdapter adapter = new DataAdapter(MainActivity.this,tasks,getSupportFragmentManager());

您可以在适配器调用中传递参数 getSupportFragmentManager 并像这样在 getSupportFragmentManager 中获取构造函数

    DataAdapter(Context context, List<Task> tasklist, 
   FragmentManager 
   supportFragmentManager) {
    this.context = context;
    this.taskList = tasklist;
    this.supportFragmentManager=supportFragmentManager;
}

在prizeList show方法中传递对象supportFragmentManager后

PrizeList prizeList = new PrizeList();
        prizeList.show(supportFragmentManager, "Prize List");

也可以在我的项目中使用,因此这有助于解决您在 supportFragmentManager 中的错误


推荐阅读