片段中的警报对话框,应用程序崩溃
Alert dialog in Fragment, app get crashed
我想在片段布局中单击按钮时显示警告对话框。我已经试过了,但是应用程序在运行时崩溃了。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentWalletBinding.inflate(inflater, container, false);
Button button = (Button)getView().findViewById(R.id.add_money);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertdialog = new AlertDialog.Builder(view.getContext());
alertdialog.setMessage("this is message");
alertdialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getContext(),"toast message",Toast.LENGTH_SHORT).show();
}
}).show();
}
});
return binding.getRoot();
}
有问题
(Button)getView().findViewById(R.id.add_money);
请确保 id 与 XML 中的相同。
onCreateView
returns View
可以进一步用getView()
的方法得到。并且您在 onCreateView
有机会 return 拥有 View
框架之前调用它(它仍在方法内部,return binding.getRoot();
还没有)
如果您正在使用视图绑定,那么从那里获取您的 Button
Button button = (Button) binding.addMoney;
甚至只是严格使用(没有额外的本地Button
)
binding.addMoney.setOnClickListener(...
如果您真的想使用 findViewById
(但为什么...),那么您可以查看 binding.getRoot()
,即使它还没有 returned/drawn[=23] =]
Button button = (Button) binding.getRoot().findViewById(R.id.add_money);
我想在片段布局中单击按钮时显示警告对话框。我已经试过了,但是应用程序在运行时崩溃了。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
binding = FragmentWalletBinding.inflate(inflater, container, false);
Button button = (Button)getView().findViewById(R.id.add_money);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder alertdialog = new AlertDialog.Builder(view.getContext());
alertdialog.setMessage("this is message");
alertdialog.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Toast.makeText(getContext(),"toast message",Toast.LENGTH_SHORT).show();
}
}).show();
}
});
return binding.getRoot();
}
(Button)getView().findViewById(R.id.add_money);
请确保 id 与 XML 中的相同。
onCreateView
returns View
可以进一步用getView()
的方法得到。并且您在 onCreateView
有机会 return 拥有 View
框架之前调用它(它仍在方法内部,return binding.getRoot();
还没有)
如果您正在使用视图绑定,那么从那里获取您的 Button
Button button = (Button) binding.addMoney;
甚至只是严格使用(没有额外的本地Button
)
binding.addMoney.setOnClickListener(...
如果您真的想使用 findViewById
(但为什么...),那么您可以查看 binding.getRoot()
,即使它还没有 returned/drawn[=23] =]
Button button = (Button) binding.getRoot().findViewById(R.id.add_money);