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

问题描述

所以我在单击按钮时设置方法名称,如下所示:

在此处输入图像描述

在活动类中我设置了loginButtonTapped这样的方法:

class LoginActivity : AppCompatActivity(), View.OnTouchListener  {

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

    }

    fun loginButtonTapped(view: View) {

    }

}

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

在此处输入图像描述

是的,我从来没有使用过视图参数loginButtonTapped

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

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

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

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

标签: androidkotlin

解决方案


这是 XML 和 Java 代码在 Android 中交互的方式。
您必须将视图作为函数参数才能获得单击视图的实例。

您可以尝试以下方法之一:

  • 通过抑制棉绒检查来忽略它(按下黄色灯泡)。
  • 在 Listener 的实现中使用.setOnClickListener()view 方法并传递一个无参数函数 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需要一个以 aview作为参数的函数。


推荐阅读