我正在尝试使用以下代码在我的自定义Dialog类中创建RadioGroup
:
public static Dialog singleChoiceRB(
Activity a
, String title
, CharSequence[] items
, Class<?> itemListener
, OnClickListener pocl
, String pocl_txt){
MyCustomDialog dialog = MyCustomDialog();
// Setup stuff in here //
RadioGroup rg = new RadioGroup(a);
for(int i = 0; i < items.length; i++){
RadioButton rb = new RadioButton(a);
rb.setText(items[i]);
RadioButtonOptionOnClick rbooc;
try {
rbooc = (RadioButtonOptionOnClick) itemListener.newInstance(); // <-- failing here
} catch (InstantiationException | IllegalAccessException e) {
e.printStackTrace();
continue;
}
rbooc.setWhich(i);
rb.setOnClickListener(rbooc);
rg.addView(rb);
}
dialog.addBodyView(rg);
return dialog.getDialog();
}
我有一个名为RadioButtonOptionClick
public abstract class RadioButtonOptionOnClick implements OnClickListener{
protected int which;
public RadioButtonOptionOnClick(){
}
public void setWhich(int which){
this.which = which;
}
}
扩展它的类
public class ScanButtonFragmentConfirmOnClick extends RadioButtonOptionOnClick{
public ScanButtonFragmentConfirmOnClick(){
super();
}
@Override
public void onClick(View view) {
setConfirmGuid(which);
}
}
我在这里调用我的对话框构造函数
confirm = MyDialogFunctions.singleChoiceRB(
a
, c.getString(R.string.checkInConfirm)
, s.toArray(new CharSequence[s.size()])
, ScanButtonFragmentConfirmOnClick.class
, new OnConfirmClick(c, a)
, getString(android.R.string.ok)
);
confirm.show();
我抓到的错误就是这个
java.lang.InstantiationException:无法实例化类 {} MyPackage的$ .ScanButtonFragment OnItemClick;没有空构造函数
如您所见,我在ScanButtonFragmentConfirmOnClick
和RadioButtonOptionOnClick
都有空构造函数。这是怎么回事? OnClickListener
没有构造函数,因为它是一个接口,问题是什么?
答案 0 :(得分:1)
在我的头撞了一会儿之后,我尝试将ScanButtonFragmentConfirmOnClick从我的Fragment中移出,它嵌入到自己的类中并且看起来很有效。
另外,对于踢腿和咯咯笑,我试图让嵌套类保持静态,并且也可以做到这一点。
故事的道德是,在尝试呼叫Class.newInstance()
时,不要使用非静态嵌套类。它没有用。