Android:IntelliJ IDEA 12.1参数视图从未使用过

时间:2013-04-10 13:12:54

标签: java android eclipse intellij-idea

请解释一下,为什么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项目的警告?

5 个答案:

答案 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 菜单禁止此检查,右箭头子菜单(禁止类/方法/语句,编辑检查设置或完全禁用它)。

unused symbol

suppress

答案 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回调。

也就是说,无需检查参数。只有一个按钮,必须是它。

所以我对此感到困惑,愤怒或悲伤:

  • API需要参数
  • IDE抱怨参数未使用。

...

但是我们可以用另一种方式看待它:

无需检查参数。只有一个按钮,一定是它

我的项目中没有任何内容可以确保前面的陈述。今天可能是正确的,而在项目后期可能会变得不正确。错误或偶然的情况也可能是不真实的。一个简单的错误。

当开发人员希望应用程序易于维护时会做什么?他检查或确保他要真实的事实。

所以我选择使此警告消失的方式是:

fun start_sync(button : View){
    assert(button.id == R.id.my_only_button)
    //...
}

最后,IDE和API都正确,错误是假设我不需要此参数。