自定义视图缺少适配器工具使用的构造函数

时间:2013-06-12 10:22:37

标签: android warnings adapter android-arrayadapter listadapter

我收到了以下警告:

  

缺少自定义视图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;
}

4 个答案:

答案 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)