java - 创建弹出窗口
问题描述
我正在单击按钮时创建一个弹出窗口。但是,我在 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)
解决方案
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 中的错误
推荐阅读
- node.js - 打字稿中 IO 的“发射”在哪里?
- python - 相同形状的数组的掩码
- python - 无法导入 tensorflow,OSError: [WinError 193] %1 不是有效的 Win32 应用程序
- c++ - SIGSEGV (Segmentation fault) c++ at function for pushBack() of list
- java - 如何将任何数字转换为任何基数?
- android - 无法在 detox 中的 android 日期选择器中选择 month_view 中的日期
- flutter - 从 API 调用提交时 Flutter 刷新 UI
- swift - 在 PickerView 中显示 Firebase 数据
- r - 在 r 中导入 json 文件的问题
- php - Laravel中的SQL Server ON DELETE CASCADE错误