2017-05-27 10 views
0

プロジェクトをKotlinに変換中です。私がダイアログ環境設定を変換すると、アプリケーションは "そのようなメソッドなし"でクラッシュしました。明らかにコンストラクタはありません。DialogPreferenceのコンストラクタが見つかりません

class FilterPreferenceFragment(context: Context, attrs: AttributeSet?) : 
    BaseDialogPreference(context, attrs) { 
    /* */ 
} 

とベースクラス:

abstract class BaseDialogPreference(context: Context, attrs: AttributeSet?) : 
    DialogPreference(context, attrs) { 
    /* */ 
} 

任意の提案

05-26 20:13:32.799 6019 6019 E AndroidRuntime: Caused by: java.lang.NoSuchMethodException: <init> [class android.content.Context, interface android.util.AttributeSet] 
05-26 20:13:32.799 6019 6019 E AndroidRuntime: at java.lang.Class.getConstructor0(Class.java:2204) 
05-26 20:13:32.799 6019 6019 E AndroidRuntime: at java.lang.Class.getConstructor(Class.java:1683) 
05-26 20:13:32.799 6019 6019 E AndroidRuntime: at android.preference.GenericInflater.createItem(GenericInflater.java:378) 

クラスは、エラーメッセージが文句2引数のコンストラクタがあります。これは、エラーメッセージのですか?

編集:

場合には、それは便利です、ここではKotlinコンパイラによって生成されたバイトコードがあります:

// access flags 0x1 
    public <init>(Landroid/content/Context;Landroid/util/AttributeSet;)V 
    @Lorg/jetbrains/annotations/NotNull;() // invisible, parameter 0 
    @Lorg/jetbrains/annotations/Nullable;() // invisible, parameter 1 
    L0 
    ALOAD 1 
    LDC "context" 
    INVOKESTATIC kotlin/jvm/internal/Intrinsics.checkParameterIsNotNull (Ljava/lang/Object;Ljava/lang/String;)V 
    L1 
    LINENUMBER 12 L1 
    ALOAD 0 
    ALOAD 1 
    ALOAD 2 
    L2 
    LINENUMBER 13 L2 
    INVOKESPECIAL android/preference/DialogPreference.<init> (Landroid/content/Context;Landroid/util/AttributeSet;)V 
    RETURN 
    L3 
    LOCALVARIABLE this Lcom/example/exampleapp/app/preference/BaseDialogPreference; L0 L3 0 
    LOCALVARIABLE context Landroid/content/Context; L0 L3 1 
    LOCALVARIABLE attrs Landroid/util/AttributeSet; L0 L3 2 
    MAXSTACK = 3 
    MAXLOCALS = 3 

    @Lkotlin/Metadata;(mv={1, 1, 6}, bv={1, 0, 1}, k=1, d1={"\u0000$\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\u0008\u0002\n\u0002\u0010\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\u0008&\u0018\u00002\u00020\u0001B\u0017\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0008\u0010\u0004\u001a\u0004\u0018\u00010\u0005\u00a2\u0006\u0002\u0010\u0006J\u0010\u0010\u0007\u001a\u00020\u00082\u0006\u0010\u0009\u001a\u00020\nH\u0014\u00a8\u0006\u000b"}, d2={"Lcom/example/exampleapp/app/preference/BaseDialogPreference;", "Landroid/preference/DialogPreference;", "context", "Landroid/content/Context;", "attrs", "Landroid/util/AttributeSet;", "(Landroid/content/Context;Landroid/util/AttributeSet;)V", "onBindView", "", "view", "Landroid/view/View;", "production sources for module ExampleApp"}) 
    // compiled from: BaseDialogPreference.kt 
+0

セカンダリコンストラクタの詳細については、 https://kotlinlang.org/docs/reference/classes.html – mcd

+0

この2次コンストラクタの署名はどのようにすべきですか? – Francesc

+0

ああ申し訳ありません。私はそれを試して、その実行を追加することを忘れている?文脈でコンテキストもnull可能ですので追加しますか?コンテキストの後ろに?とその作品。 オープンクラスB(context:Context ?, attrs:AttributeSet?):DialogPreference(context、attrs) – mcd

答えて

0

は私が間違っているクラスを見ていたが判明しました。私は、コンストラクタから3番目の引数削除する必要がありましたクラッシュ解決するために

class BaseCheckBoxPreference(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : CheckBoxPreference(context, attrs, defStyleAttr) { /* */ } 

:エラーは、この他の好みから来た別

class BaseCheckBoxPreference(context: Context, attrs: AttributeSet? = null) : CheckBoxPreference(context, attrs) { /* */ } 

を、我々は唯一の2つの引数を取り、二次のコンストラクタを定義することができますしかし、私のユースケースでは、2つの引数を持つものだけが必要でした。二次コンストラクタは、コンストラクタを含むDialogPreferenceクラスの二次コンストラクタを使用する必要があります

class BaseCheckBoxPreference(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : CheckBoxPreference(context, attrs, defStyleAttr) { 

constructor(context: Context, attrs: AttributeSet? = null) : this(context, attrs, 0) 

/* */ 
} 
関連する問題