我收到了以下警告:
缺少自定义视图com / example / view / adapter / SomeAdapter 工具使用的构造函数:(Context)或(Context,AttributeSet)或 (上下文,AttributeSet中,INT)
在我的类SomeAdapter中,它扩展了一些扩展ArrayAdapter的BaseAdapter
public class SomeAdapter extends BaseAdapter{}
public abstract class BaseAdapter extends ArrayAdapter<SomeModel>{}
警告存在于具体适配器中,但不存在于抽象BaseAdapter中。 在这种情况下有没有人听说过这个警告?
AFAIK Android通过ViewConstructorDetector检查超类的名称来检查类是否正在扩展视图:
private static boolean isViewClass(ClassContext context, ClassNode node) {
String superName = node.superName;
while (superName != null) {
if (superName.equals("android/view/View") //$NON-NLS-1$
|| superName.equals("android/view/ViewGroup") //$NON-NLS-1$
|| superName.startsWith("android/widget/") //$NON-NLS-1$
&& !((superName.endsWith("Adapter") //$NON-NLS-1$
|| superName.endsWith("Controller") //$NON-NLS-1$
|| superName.endsWith("Service") //$NON-NLS-1$
|| superName.endsWith("Provider") //$NON-NLS-1$
|| superName.endsWith("Filter")))) { //$NON-NLS-1$
return true;
}
superName = context.getDriver().getSuperClass(superName);
}
return false;
}
据我所知,我的班级名称与上述模式不符。 有没有人知道如何修复或压制此警告?
BaseAdapter中的getView():
@Override
public final View getView(final int position, final View convertView, final ViewGroup parent) {
View view = convertView;
if (null == view) {
view = createNewView(parent, position);
} else {
reuseOldView(view, position);
}
return view;
}
答案 0 :(得分:10)
在CustomView类中添加构造函数:
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
}
答案 1 :(得分:3)
某些布局工具(例如Eclipse的Android布局编辑器)需要找到具有以下签名之一的构造函数:
* View(Context context)
* View(Context context, AttributeSet attrs)
* View(Context context, AttributeSet attrs, int defStyle)
如果你没有使用这些东西,并且只想摆脱所有项目的警告,请转到:
窗口 - &gt;偏好 - &gt; Android - &gt; Lint错误检查。
从列表中找到 ViewConstructor
,并将严重性设置为'忽略'。
答案 2 :(得分:0)
请在Kotlin中尝试以下操作:-
class CustomView: View {
constructor(context: Context) : this(context, null)
constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0)
constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
}
}
答案 3 :(得分:0)
在科特林:
class KotlinView @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr)