请解释一下,为什么IntelliJ IDEA会向我显示参数从未使用过?
http://i.stack.imgur.com/Wvnd2.jpg
public void onClick(View view) { // Parameter 'view' never used
Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
}
<ToggleButton
...
android:onClick="onClick"/>
但是我知道,如果我删除这个从未使用过的参数(视图),Android会抛出我的运行时异常。
为什么IntelliJ IDEA v12.1会显示此类警告但Eclipse不显示。 如何配置IntelliJ IDEA来隐藏所有Android项目的警告?
答案 0 :(得分:18)
对于Kotlin,使用这句话来压制这个警告:
fun onClick(@Suppress("UNUSED_PARAMETER")view: View) {
}
答案 1 :(得分:8)
我认为更改警告设置不是最佳解决方案。
相反,您可以尝试以下代码:
public void onClick(@SuppressWarnings("UnusedParameters")View ignored) { // Parameter 'ignored' never used
Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
}
答案 2 :(得分:4)
您会看到此警告,因为默认情况下启用了未使用符号检查,并配置为显示任何未使用的参数。虽然在这种特定情况下它不是问题,但它可以帮助您在其他情况下跟踪错误(例如,当您使用具有类似名称的局部变量时,因为拼写错误而不是实际的方法参数)。
此检查提供了许多选项,您可以根据需要进行调整,例如禁用检查参数选项。或者您可以定义注释,例如@Unused
,以便IDE将忽略带有这些注释的任何参数,或者您可以通过 Alt + Enter 菜单禁止此检查,右箭头子菜单(禁止类/方法/语句,编辑检查设置或完全禁用它)。
答案 3 :(得分:3)
因为您从不在方法view
中使用参数onClick
。但是这个method的默认签名。
例如,如果您将在方法中使用参数,则IntelliJ IDEA不会显示“参数从未使用过”
public void onClick(View view) { // Parameter 'view' used
if(view.getId() == R.id.myId) //example start
{
Toast.makeText(this, "CorrectId", Toast.LENGTH_LONG).show();
} //example finish
Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
}
更新
例如,主布局中有3个按钮:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_switcher"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<Button
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/btn1"
android:onClick="onClick"
/>
<Button
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/btn2"
android:onClick="onClick"
/>
<Button
android:layout_width="100dp"
android:layout_height="100dp"
android:id="@+id/btn3"
android:onClick="onClick"
/>
</LinearLayout>
我的活动metod onClick处理来自三个按钮的事件。我们需要认识到按钮已被按下。
public void onClick(View view) { // Parameter 'view' used
switch (view.getId())
{
case (R.id.btn1):
{
Toast.makeText(this, "Hello Button_1 pressed", Toast.LENGTH_LONG).show();
break;
}
case (R.id.btn2):
{
Toast.makeText(this, "Hello Button_2 pressed", Toast.LENGTH_LONG).show();
break;
}
case (R.id.btn3):
{
Toast.makeText(this, "Hello Button_2 pressed", Toast.LENGTH_LONG).show();
break;
}
}
这是如何使用“视图”
的一个示例答案 4 :(得分:1)
上面所说的一切都是伟大而真实的。这是另一种查看方式:
起初,我认为不需要使用此参数。正是由于这样一个事实,在我正在处理的应用程序中,只有一个View(可能是Button)调用了OnClick回调。
也就是说,无需检查参数。只有一个按钮,必须是它。
所以我对此感到困惑,愤怒或悲伤:
...
但是我们可以用另一种方式看待它:
无需检查参数。只有一个按钮,一定是它
我的项目中没有任何内容可以确保前面的陈述。今天可能是正确的,而在项目后期可能会变得不正确。错误或偶然的情况也可能是不真实的。一个简单的错误。
当开发人员希望应用程序易于维护时会做什么?他检查或确保他要真实的事实。
所以我选择使此警告消失的方式是:
fun start_sync(button : View){
assert(button.id == R.id.my_only_button)
//...
}
最后,IDE和API都正确,错误是假设我不需要此参数。