2017-06-12 7 views
2

AndroidでKotlinを学習する過程で、コンパイルが失敗し、一般に役に立たないエラーテキストが私を困惑させてしまいました。エラーテキストには、次のように表示されます。Kotlin Android Projectでフラグメントトランザクションがコンパイルされない

以下の関数は、引数 を指定して呼び出すことはできません。両方のインスタンスフラグメントで(フラグメント!,列!) で定義されているが、android.app.FragmentTransaction追加(INT、フラグメント!) android.app.FragmentTransaction

で定義されているを追加!テキストは赤で強調表示されます。私はKotlinが!でJavaクラスを参照していることを知っていますが、なぜ入力を提供したかに満足していないのは分かりません。

洞察力があれば幸いです。

fun displayEditRoutine(){ 

    //Set our variables 
    var ft = fragmentManager.beginTransaction() 

    //Basic "newInstance" constructor to avoid omitting necessary variables 
    var frag = EditRoutine.newInstance(mRoutineID,this) 

    //Here is where error occurs 
    ft.add(R.id.are_container, frag).commit() 

} 

EditRoutineクラスが参照される:

class EditRoutine : Fragment() { 

//Variables 
private var mRoutineID: String? = null 
private var mListener: OnEditRoutineFragmentListener? = null 

//Views 
@BindView(R.id.fer_routineName) internal var vRoutine: TextInputEditText? = null 

override fun onCreate(savedInstanceState: Bundle?) { 
    super.onCreate(savedInstanceState) 
    if (arguments != null) { 
     mRoutineID = arguments.getString(Keys.b_RoutineID) 
    } 
} 

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, 
          savedInstanceState: Bundle?): View? { 
    val v = inflater.inflate(R.layout.fragment_edit_routine, container, false) 
    ButterKnife.bind(activity) 
    return v 
} 

// TODO: Rename method, update argument and hook method into UI event 
fun onButtonPressed(): Unit{ 
    if (mListener != null && vRoutine!!.text.toString() != "") { 
     val contentValues = ContentValues() 
     contentValues.put(Routine.Table.KEY_NAME, vRoutine!!.text.toString()) 

     //Pass the values into the interface 
     mListener!!.onDoneClicked(contentValues) 
    } 
} 

override fun onAttach(context: Context) { 
    super.onAttach(context) 
    if (context is OnEditRoutineFragmentListener) { 
     mListener = context 
    } else { 
     throw RuntimeException(context.toString() + " must implement OnEditRoutineFragmentListener") 
    } 
} 

override fun onDetach() { 
    super.onDetach() 
    mListener = null 
} 

//Internal Methods 


//Interface 
interface OnEditRoutineFragmentListener { 
    // TODO: Update argument type and name 
    fun onDoneClicked(cv: ContentValues) 

} 

companion object { 

    /** 
    * @param routineID = passed ID. If null, don't load content values 
    * * 
    * @return A new instance of fragment EditRoutine. 
    */ 
    fun newInstance(routineID: String, ctx: Context): EditRoutine { 
     val fragment = EditRoutine() 
     val args = Bundle() 
     args.putString(Keys.b_RoutineID, routineID) 
     fragment.arguments = args 
     return fragment 
    } 
} 
+2

あなたがサポートフラグメントを作成する場合は、supportFragmentManagerを使用する代わりにfragmentManager – BladeCoder

+0

必要があり、あなたの 'EditRoutine'クラスを投稿してもらえますか? – Marce

+0

提案していただきありがとうございます。私の最小APIは19ですので、通常のフラグメントを使用しています –

答えて

3

は、これを試してください ft.add(R.id.container_all, frag as Fragment).commit()

+0

それはうまくいきました、私はKotlinが私のクラスの親を見ることができなかったと思います –

0

JvmStatic:この注釈が必要とされる(documentation

コンパニオン・オブジェクト{

/** 
* @param routineID = passed ID. If null, don't load content values 
* * 
* @return A new instance of fragment EditRoutine. 
*/ 

@JvmStatic 
fun newInstance(routineID: String, ctx: Context): EditRoutine { 
    val fragment = EditRoutine() 
    val args = Bundle() 
    args.putString(Keys.b_RoutineID, routineID) 
    fragment.arguments = args 
    return fragment 
} 

}

関連する問題