关于android自定义控件动态添加的初始化问题

时间:2021-02-06 20:38:20
我是使用的先layout布局,然后新建一个该控件类来实现自定义控件的。这个控件的名字是ChooseItem。
这个自定义控件的构造函数是:

public ChooseItem(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
LayoutInflater.from(context).inflate(R.layout.chooseitem, this, true);

titleView = (TextView)findViewById(R.id.ctitletv);
numView = (TextView)findViewById(R.id.cnumtv);
timeView = (TextView)findViewById(R.id.ctimetv);
//teEditText = (EditText)findViewById(R.id.te);
}


现在我需要在一个activity里面的一个LinearLayout布局中动态增加这个自定义控件。现在有一个问题是,使用LinearLayout.addview(ChooseItem)的时候,都提示我要初始化。可我不知道ChooseItem ctemp = new ChooseItem(?)这里的初始化参数该怎么写。或者还有别的初始化方法?

我是android新手,恳请各位大牛帮忙~感激不尽~

9 个解决方案

#1


自己顶一下,求教啊~~!!

#2


再顶!

#3


是个View 就都用Context

#4


加一个构造函数public ChooseItem(Context context){
super(context);
}

#5


引用 4 楼 haoyizsw 的回复:
加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Context context, AttributeSet attrs)参数下的构造函数里面实现,也就是说我要是new一个ChooseItem,我也要new ChooseItem( Context, AttributeSet)。现在我就是不知道到底传什么样的实参,特别是AttributeSet。

#6


引用 5 楼 jiokoi1989 的回复:
引用 4 楼 haoyizsw 的回复:

加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Context context, AttributeSet attrs)参数下的构造函数里面实现,也就是说……


请直接传null就可以了

#7


引用 6 楼 lingang1359 的回复:
引用 5 楼 jiokoi1989 的回复:
引用 4 楼 haoyizsw 的回复:

加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Context context, AttributeSe……


不可以诶,编译没问题,一在模拟器里面就报错了。我用的是
ChooseItem ctemp = new ChooseItem(this,null);
listLinearLayout.addView(ctemp);
但一运行就错了。

#8


引用 7 楼 jiokoi1989 的回复:
引用 6 楼 lingang1359 的回复:

引用 5 楼 jiokoi1989 的回复:
引用 4 楼 haoyizsw 的回复:

加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Co……


ChooseItem ctemp = new ChooseItem(this,null);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
ctemp.setLayoutParams(params);
listLinearLayout.addView(ctemp);

#9


引用 6 楼 lingang1359 的回复:
引用 5 楼 jiokoi1989 的回复:
引用 4 楼 haoyizsw 的回复:

加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Context context, AttributeSe……

我傻了,没有初始化listLinearLayout,现在运行没问题了!
太感谢你了!!!

#1


自己顶一下,求教啊~~!!

#2


再顶!

#3


是个View 就都用Context

#4


加一个构造函数public ChooseItem(Context context){
super(context);
}

#5


引用 4 楼 haoyizsw 的回复:
加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Context context, AttributeSet attrs)参数下的构造函数里面实现,也就是说我要是new一个ChooseItem,我也要new ChooseItem( Context, AttributeSet)。现在我就是不知道到底传什么样的实参,特别是AttributeSet。

#6


引用 5 楼 jiokoi1989 的回复:
引用 4 楼 haoyizsw 的回复:

加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Context context, AttributeSet attrs)参数下的构造函数里面实现,也就是说……


请直接传null就可以了

#7


引用 6 楼 lingang1359 的回复:
引用 5 楼 jiokoi1989 的回复:
引用 4 楼 haoyizsw 的回复:

加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Context context, AttributeSe……


不可以诶,编译没问题,一在模拟器里面就报错了。我用的是
ChooseItem ctemp = new ChooseItem(this,null);
listLinearLayout.addView(ctemp);
但一运行就错了。

#8


引用 7 楼 jiokoi1989 的回复:
引用 6 楼 lingang1359 的回复:

引用 5 楼 jiokoi1989 的回复:
引用 4 楼 haoyizsw 的回复:

加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Co……


ChooseItem ctemp = new ChooseItem(this,null);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
ctemp.setLayoutParams(params);
listLinearLayout.addView(ctemp);

#9


引用 6 楼 lingang1359 的回复:
引用 5 楼 jiokoi1989 的回复:
引用 4 楼 haoyizsw 的回复:

加一个构造函数public ChooseItem(Context context){
super(context);
}

我控件类里面两个构造函数都继承了,你写的那个我也有写。
如果只是context还好,但我定义的那个控件必须是在(Context context, AttributeSe……

我傻了,没有初始化listLinearLayout,现在运行没问题了!
太感谢你了!!!