因此,当我单击按钮时,我设置了方法名称,
以及我在活动类中设置的loginButtonTapped
方法,如下所示:
class LoginActivity : AppCompatActivity(), View.OnTouchListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
fun loginButtonTapped(view: View) {
}
}
在“构建”选项卡中,我有警告,据说从未使用过参数视图:
是的,我从未在该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'
那么如何避免“从不使用参数视图”并且避免崩溃?这里出了什么问题?
答案 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
作为参数的函数。