【问题标题】:kotlin.NotImplementedError: An operation is not implemented: not implemented Error from ImageButton Clickkotlin.NotImplementedError: An operation is not implemented: not implemented Error from ImageButton Click
【发布时间】:2018-11-03 08:28:06
【问题描述】:

得到这个错误

kotlin.NotImplementedError: An operation is not implemented: not implemented

我正在实现一个 ImageButton 点击​​监听器

要求 :- 我想对 imagebutton click 执行操作,但出现上述错误

请纠正我,如果还有其他方法可以实现 imagebutton 点击​​监听器,请提供它,谢谢

这里是fragment java 类

class 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;
    }


}

然后是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>

【问题讨论】:

    标签: android kotlin fragment onclicklistener kotlin.notimplementederror


    【解决方案1】:

    只需从您的 onClickListener 中删除 TODO( ... )

    override fun onClick(v: View?) {
        // No TODO here
        when (v?.id) {
            ...
        }
    }
    

    TODO(...) 是 Kotlin 函数,它总是抛出 NotImplementedError。如果你想用 TODO 标记一些东西但不抛出异常 - 只需将 TODO 与 cmets 一起使用:

    override fun onClick(v: View?) {
        //TODO: implement later
        when (v?.id) {
            ...
        }
    }
    

    【讨论】:

    • 那么如何摆脱这个待办事项,ide 把它放在那里很烦人。
    • 从来没想过。谢谢!
    • 如果需要返回类型但还没有实现怎么办?例如实现接口
    • @Rafael 那么你要么必须返回存根值(例如 0/false/null/"", override fun test(): Int = 0)或抛出异常(例如 override fun test(): Int = throw IllegalStateException("Not implemented yet")
    【解决方案2】:

    TODO() 是 Kotlin 中的内联函数。它总是会抛出 NotImplementedError。请参阅#documentation:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-t-o-d-o.html

    如果您只想标记这段代码仍然需要工作,请使用// TODO。然后,标记将在 TODO 部分可见,但不会抛出异常。

    【讨论】:

      【解决方案3】:

      我实现了这个

        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.
              }
      
          }
      

      从下面的代码中删除待办事项后

       spinCustomTime.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
          override fun onNothingSelected(parent: AdapterView<*>?) {
      
          }
      
          override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
      
          }
      
      }
      

      解决了我的问题。

      另请参阅此文档链接以进行说明 请参阅#documentation:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-t-o-d-o.html

      【讨论】:

        猜你喜欢
        • 2021-03-13
        • 1970-01-01
        • 2019-03-16
        • 2020-10-01
        • 2019-03-11
        • 2015-08-27
        • 2019-12-09
        • 2023-01-09
        相关资源
        最近更新 更多