在onClick方法中删除“视图”时如何解决错误?

时间:2019-01-30 10:30:00

标签: android kotlin

因此,当我单击按钮时,我设置了方法名称,

enter image description here

以及我在活动类中设置的loginButtonTapped方法,如下所示:

class LoginActivity : AppCompatActivity(), View.OnTouchListener  {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

    }

    fun loginButtonTapped(view: View) {

    }

}

在“构建”选项卡中,我有警告,据说从未使用过参数视图:

enter image description here

是的,我从未在该loginButtonTapped上使用过arg

然后我尝试删除该参数为fun loginButtonTapped() {}

但是更糟糕的是,我在运行应用程序时崩溃了:

  

进程:com.xxxx.lakuinkotlin,PID:10922           java.lang.IllegalStateException:在以下项的父项或祖先上下文中找不到方法loginButtonTapped(View)   在视图类上定义的android:onClick属性   具有ID的android.support.v7.widget.AppCompatButton   'login_button_loginActivity'

那么如何避免“从不使用参数视图”并且避免崩溃?这里出了什么问题?

1 个答案:

答案 0 :(得分:1)

这是XML和Java代码在Android中交互的方式。
您必须具有视图作为功能参数,才能拥有被单击的视图的实例。

您可以尝试以下操作之一:

  • 通过抑制(按下黄色灯泡)来忽略棉绒检查。
  • 使用.setOnClickListener()视图方法并在侦听器的实现中传递无参数函数 onClick(View)
TextView t;
t.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         onClickTextData(); // No param
     }
});
//All arguments to the listener method are optional.

@OnClick(R.id.submit)
public void submit() {
  // TODO submits data to server...
}

因为调用该方法时没有在onCreate中获取Button。为了访问该按钮,您需要有一个视图。 因此,为避免崩溃,必须将View实例添加到方法中。

您会看到错误文本中有Could not find method loginButtonTapped(View)。意味着这种实现onClick的方法需要一个以view作为参数的函数。