通过"这个"作为自定义组件中的LayoutInflater.inflate()的根目录

时间:2016-09-22 10:56:26

标签: android custom-component layout-inflater

我正在编写扩展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)。那为什么会有问题?

1 个答案:

答案 0 :(得分:2)

inflate()返回View,您尝试将其分配给更具体的ViewGroup变量。它不是this作为父视图有问题 - 您需要对返回值进行强制转换:

defaultSetters = (ViewGroup)inflater.inflate(...)