我正在编写扩展LinearLayout的自定义组件的代码。它将在顶部包含一个Spinner,并在下面包含一些设置,具体取决于Spinner的设置。即,当用户选择" Apple"在旋转器上,一个"颜色"选项出现,当他们选择" Banana" a"长度"选项出现。
由于微调器选项可能有许多与之关联的设置,因此我使用" merge"来定义布局XML中的每组设置。作为根标签。然后我在每个构造函数中调用initViews()来膨胀视图,以便稍后添加/删除它们。
以下是该类的代码:
public class SchedulePickerView extends LinearLayout {
protected Context context;
protected Spinner typeSpinner;
protected ViewGroup defaultSetters; // ViewGroup to show when no schedule is selected in the spinner
protected ViewGroup simpleSetters; // ViewGroup to show when SimpleSchedule is selected in the spinner
public SchedulePickerView(Context context) {
super(context);
this.context = context;
initViews();
}
public SchedulePickerView(Context context, AttributeSet attr) {
super(context, attr);
this.context = context;
initViews();
}
public SchedulePickerView(Context context, AttributeSet attr, int defstyle) {
super(context, attr, defstyle);
this.context = context;
initViews();
}
private void initViews() {
// Init typeSpinner
typeSpinner = (Spinner) findViewById(R.id.schedulepickerSpinner);
// Init setters (ViewGroups that show settings for the various types of schedules
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// ERROR IS ON THIS LINE:
defaultSetters = inflater.inflate(R.layout.container_schedulesetter_default, this);
}
}
我在标记的行上出现此错误:"不兼容的类型:必需= ViewGroup,Found = View"。但是根据this文档,LinearLayout扩展了ViewGroup。我甚至尝试过铸造"这个"到了一个ViewGroup,但奇怪的是IDE将灰色显示为灰色(因为很明显,每个LinearLayout都已经是一个ViewGroup)。那为什么会有问题?
答案 0 :(得分:2)
inflate()
返回View
,您尝试将其分配给更具体的ViewGroup
变量。它不是this
作为父视图有问题 - 您需要对返回值进行强制转换:
defaultSetters = (ViewGroup)inflater.inflate(...)