【问题标题】:creating pop up window创建弹出窗口
【发布时间】:2021-10-07 20:19:45
【问题描述】:

我正在单击按钮时创建一个弹出窗口。但是,我在 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: 致命异常: main 进程:com.luteraa.luteraaesports,PID:6355 java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法 'androidx.fragment.app.FragmentManager androidx.fragment.app.FragmentActivity.getSupportFragmentManager()' 在 com.luteraa.luteraaesports.BGMICategoryAdapter.openDialog(BGMICategoryAdapter.java:93) 在 com.luteraa.luteraaesports.BGMICategoryAdapter.access$000(BGMICategoryAdapter.java:25) 在 com.luteraa.luteraaesports.BGMICategoryAdapter$1.onClick(BGMICategoryAdapter.java:76) 在 android.view.View.performClick(View.java:7191) 在 com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119) 在 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(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:995)

【问题讨论】:

  • 您的prizeList 对话框根本没有绑定到任何Activity,因此在没有父活动的片段上调用geActivity() 将返回null
  • 那么请告诉我解决方案

标签: java android android-studio


【解决方案1】:
  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中的对象supportFragmentManager后 显示 方法

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

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

【讨论】:

  • 我需要从我的适配器而不是我的活动中调用它。它显示错误。
猜你喜欢
  • 2011-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 2014-05-26
相关资源
最近更新 更多