kotlin.NotImplementedError: An operation is not implemented: not implemented Error from ImageButton Click
Solution 1
Just remove TODO( ... )
from your onClickListener:
override fun onClick(v: View?) {
// No TODO here
when (v?.id) {
...
}
}
TODO(...)
is Kotlin function which always throws NotImplementedError
. If you want to mark something with TODO but to not throw exception - just use TODO with comments:
override fun onClick(v: View?) {
//TODO: implement later
when (v?.id) {
...
}
}
Solution 2
TODO()
is an inline function in Kotlin. It ALWAYS will throw NotImplementedError. See #documentation: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-t-o-d-o.html
If you want just to mark that this fragment of code still needs work, use // TODO
. Then, the mark will be visible in TODO section, but will not throw exception.
Solution 3
I implemented this
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.
}
}
After removing todo from this below code
spinCustomTime.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onNothingSelected(parent: AdapterView<*>?) {
}
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
}
}
solved my problem.
Also see this doc link for clarification See #documentation: https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-t-o-d-o.html
Quick learner
https://youtu.be/fCA-4uD0rr0 Learn Code Quickly Ready to Learn with Dedication And Like to share my Knowledge. Its right Learning is a never ending process. Android,IOS & Flutter repos here https://github.com/quicklearner4991?tab=repositories Check out the Apps locker https://github.com/quicklearner4991/Applocker-android
Updated on July 09, 2022Comments
-
Quick learner almost 2 years
Getting this Error
kotlin.NotImplementedError: An operation is not implemented: not implemented
I am implementing an ImageButton click listener
Requirement :- I want to perform an action on imagebutton click , but getting the above mentioned error
Correct me and also if there is any other work around to implement imagebutton click listener, do provide it , Thanks
Here is the
fragment
java classclass FragmentClass : 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_class, 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: 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; } }
and then the
fragment_class. 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"> <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>
-
Steve Moretz about 5 yearsWell how to get rid of that todo the ide puts it there and it's annoying.
-
Giedrius Šlikas about 5 yearsNever thought of it. Thanks !
-
Rafael over 3 yearsWhat if a return type is required but no implementation is there yet? e.g. implementing an interface
-
hluhovskyi over 3 years@Rafael then you either have to return stub value (e.g. 0/false/null/"",
override fun test(): Int = 0
) or throw an exception (e.g.override fun test(): Int = throw IllegalStateException("Not implemented yet")