gpt4 book ai didi

java - fragment null 必须是公共(public)静态类才能从实例状态正确地重新创建

转载 作者:太空狗 更新时间:2023-10-29 16:30:36 26 4
gpt4 key购买 nike

我无法弄清楚为什么我的应用程序在调用 getSupportFragmentManager() 时崩溃。我在其他应用程序中使用类似的代码来创建警报对话框没有任何问题。请帮忙!

DialogFragment df = new DialogFragment(){

@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
View view = getActivity().getLayoutInflater().inflate(R.layout.addincome,null);
builder.setView(view);
//capture
final EditText amountEditText=(EditText)view.findViewById(R.id.edit_amount);
final EditText descriptionEditText=(EditText)view.findViewById(R.id.edit_description);
builder.setNegativeButton(android.R.string.cancel,null);
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
newIncome.setAmount(Double.parseDouble(amountEditText.getText().toString()));
newIncome.setDescription(descriptionEditText.getText().toString());
user.incomes.add(newIncome);
HashMap<String,User> modified = new HashMap<>();
modified.put(uid,user);
rootref.setValue(modified);
}
});
return builder.create();
}
};
df.show(getSupportFragmentManager(),"addIncome");

最佳答案

你的DialogFragment是一个匿名类,在Java中匿名类只能被父类实例化:new DialogFragment()其实就是this。新的 DialogFragment()。显然,当 FragmentManager 尝试根据配置更改重新创建 DialogFragment 时,它不能,因为它无权访问父类的实例。解决方案是声明 DialogFragmentstatic 子类,或者声明 DialogFragment 的顶级子类,然后使用它代替匿名类。

关于java - fragment null 必须是公共(public)静态类才能从实例状态正确地重新创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39978924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com