膨胀自定义视图时出错

时间:2015-08-13 18:43:00

标签: android android-cardview

我有一个名为MyCustomView的课程,其扩展CardView并实施GestureDetectorCompat.OnGestureListener

当我膨胀MyCustomView时,我一直收到以下错误:

Unable to start activity  android.view.InflateException: Binary XML file line #26: Error inflating class com.ridever.scrollableviews.MyCardView
Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet]

请注意:

  1. 我已在布局文件中声明了包名称。
  2. 我已经宣布了我的域名,即xmlns:app ....
  3. 我已经定义了它的3个超类构造函数。
  4. 在阅读了关于同一问题的大多数帖子后,我不知道出了什么问题。有什么想法吗?

    这是我的代码和布局

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    
    <android.support.v7.widget.CardView
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/cardview"
        android:layout_alignParentTop="true"
        app:cardElevation="1dp">
    
        <!--ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleType="fitXY"
            android:src="@drawable/background"/-->
    
    </android.support.v7.widget.CardView>
    
    
    <com.ridever.scrollableviews.MyCardView
        android:id="@+id/cardview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="-100dp"
        app:cardElevation="1dp">
    
        <ImageView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:scaleType="fitXY"
            android:src="@drawable/scrollable" />
    
    </com.ridever.scrollableviews.MyCardView>
    

    MyCardView定义:

    package com.ridever.scrollableviews;
    
    import android.content.Context;
    import android.support.v4.view.GestureDetectorCompat;
    import android.support.v7.widget.CardView;
    import android.util.AttributeSet;
    import android.util.Log;
    import android.view.GestureDetector;
    import android.view.MotionEvent;
    
    public class MyCardView extends CardView implements                 GestureDetector.OnGestureListener{
    private static final String CTAG = "MyCardView";
    
    private GestureDetectorCompat gestureDetectorCompat;
    
    
    public MyCardView(Context context) {
        super(context);
        gestureDetectorCompat = new GestureDetectorCompat(getContext(), this);
    }
    
    public MyCardView(Context context, AttributeSet attrs, GestureDetectorCompat gestureDetectorCompat) {
        super(context, attrs);
        gestureDetectorCompat = new GestureDetectorCompat(getContext(), this);
    
    }
    
    public MyCardView(Context context, AttributeSet attrs, int defStyleAttr, GestureDetectorCompat gestureDetectorCompat) {
        super(context, attrs, defStyleAttr);
        gestureDetectorCompat = new GestureDetectorCompat(getContext(), this);
    }
    
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        gestureDetectorCompat.onTouchEvent(event);
        return super.onTouchEvent(event);
    }
    
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        final String MTAG = ".onFling()";
        Log.i(String.format("%s%s", CTAG, MTAG), "...");
    
        return true;
    }
    

1 个答案:

答案 0 :(得分:1)

您是否尝试从这两个构造函数中删除额外的参数?

public MyCardView(Context context, AttributeSet attrs, GestureDetectorCompat gestureDetectorCompat) {

public MyCardView(Context context, AttributeSet attrs, int defStyleAttr, GestureDetectorCompat gestureDetectorCompat) {

通过额外的参数,我的意思是GestureDetectorCompat,因为你修改了CardView的合同(通过合同我的意思是可用的构造函数),我猜Android正在尝试使用其中一个实例化你的MyCardView。 / p>