Obtenir cette erreur
kotlin.NotImplementedError: une opération n'est pas implémentée: pas implémentée
J'implémente un écouteur de clic ImageButton
Condition préalable : - Je souhaite effectuer une action lors d'un clic sur imagebutton, mais en obtenant l'erreur susmentionnée.
Corrigez-moi et s'il y a un autre moyen de mettre en œuvre un écouteur imagebutton, fournissez-le, merci
Voici le fragment de classe Java
class AddBucketFragment : Fragment(), View.OnClickListener {
override fun onClick(v: View?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
when (v?.id) {
R.id.back_icon -> {
Toast.makeText(activity, "back button pressed", Toast.LENGTH_SHORT).show()
activity.onBackPressed()
}
else -> {
}
}
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?,
savedInstanceState: Bundle?): View? {
val view: View = inflater!!.inflate(R.layout.fragment_add_bucket, container,
false)
val activity = getActivity()
var input_name = view.findViewById(R.id.input_name) as EditText
var tv_addbucket = view.findViewById(R.id.tv_addbucket) as TextView
// val back_icon = view.findViewById(R.id.back_icon) as ImageButton
val back_icon: ImageButton = view.findViewById(R.id.back_icon)
back_icon.setOnClickListener(this)
tv_addbucket.setOnClickListener(View.OnClickListener {
Toast.makeText(activity, input_name.text, Toast.LENGTH_SHORT).show()
})
return view;
}
}
et ensuite le fragment_add_bucket. xml
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".activities.SIgnUpLoginActivity">
<RelativeLayout
Android:id="@+id/header"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:clickable="true"
Android:padding="10dp">
<ImageButton
Android:id="@+id/back_icon"
Android:layout_width="40dp"
Android:layout_height="40dp"
Android:background="#0000"
Android:focusable="true"
Android:focusableInTouchMode="true"
Android:clickable="true"
Android:src="@drawable/back_icon" />
<TextView
Android:id="@+id/tv_header"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:text="Add Bucket" />
</RelativeLayout>
<ScrollView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_below="@+id/header"
Android:fillViewport="true">
<LinearLayout
Android:layout_width="fill_parent"
Android:layout_height="match_parent"
Android:layout_marginTop="?attr/actionBarSize"
Android:orientation="vertical"
Android:paddingLeft="20dp"
Android:paddingRight="20dp"
Android:paddingTop="60dp">
<Android.support.design.widget.TextInputLayout
Android:id="@+id/input_layout_name"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<EditText
Android:id="@+id/input_name"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:hint="Bucket Name"
Android:singleLine="true" />
</Android.support.design.widget.TextInputLayout>
<TextView
Android:id="@+id/tv_addbucket"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginTop="40dp"
Android:background="@drawable/blue_stroke_background"
Android:gravity="center"
Android:padding="15dp"
Android:text="Add"
Android:textColor="@color/white" />
</LinearLayout>
</ScrollView>
</RelativeLayout>
Supprimez simplement TODO( ... )
de votre onClickListener:
override fun onClick(v: View?) {
// No TODO here
when (v?.id) {
...
}
}
TODO(...)
est une fonction de Kotlin qui lance toujours NotImplementedError
. Si vous voulez marquer quelque chose avec TODO mais ne pas lancer d'exception, utilisez simplement TODO avec des commentaires:
override fun onClick(v: View?) {
//TODO: implement later
when (v?.id) {
...
}
}
TODO()
est une fonction en ligne de Kotlin. Il lancera TOUJOURS NotImplementedError. Voir #documentation: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-t-o-d-o.html
Si vous souhaitez simplement indiquer que ce fragment de code a encore besoin de travail, utilisez // TODO
. Ensuite, la marque sera visible dans la section TODO, mais ne lèvera pas d'exception.
J'ai implémenté ceci
val extraTime = arrayListOf<String>("1 hour")
val extraTimeAdapter = CustomSpinDeliveryExtraTimeAdapter(context!!, R.layout
.simple_spinner_text_middle_down_arrow, extraTime)
spinCustomTime.adapter = extraTimeAdapter
spinCustomTime.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
}
}
Après avoir supprimé la tâche de ce code ci-dessous
spinCustomTime.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
}
}
résolu mon problème.
Voir également ce lien dans le document pour plus de précisions. Voir la # documentation: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-t-o-d-o.html