android - 在 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'
那么如何避免“从不使用参数视图”并且避免崩溃?这里出了什么问题?
解决方案
这是 XML 和 Java 代码在 Android 中交互的方式。
您必须将视图作为函数参数才能获得单击视图的实例。
您可以尝试以下方法之一:
- 通过抑制棉绒检查来忽略它(按下黄色灯泡)。
- 在 Listener 的实现中使用
.setOnClickListener()
view 方法并传递一个无参数函数onClick(View)
。
TextView t;
t.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onClickTextData(); // No param
}
});
- 使用ButterKnife库。
//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
作为参数的函数。
推荐阅读
- c# - Json.Net 自定义 ContractResolver 忽略自定义对象
- css - 在 Chrome 和/或 Firefox 中复制 -webkit-mask-composite:destination-atop 的任何方式?
- flutter - 颤振分析在本地工作,但在 github 操作中失败
- flutter - 无法从 API 颤振列表中获取计数
- google-cloud-platform - add-iam-policy-binding vs set-iam-policy
- linux - 从输出中删除部分路径 - Linux shell
- python - 用户警告:不推荐使用“lr”参数,请使用“learning_rate”
- laravel - niklasravnsborg/laravel-pdf 不渲染地图
- datetime - 从文本值转换为日期时间
- numpy - hasattr(np.array(1), '__iter__') 是 True 但在循环 np.array(1) 时抛出 TypeError