繁体   English   中英

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

[英]Android: IntelliJ IDEA 12.1 Parameter view never used

请解释一下,为什么 IntelliJ IDEA 显示参数从未使用过?

在此处输入图像描述

 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 项目的此类警告?

对于 Kotlin,使用这句话来抑制这个警告:

fun onClick(@Suppress("UNUSED_PARAMETER")view: View) {

}

我不认为更改警告设置是最好的解决方案。

相反,您可以尝试以下代码:

public void onClick(@SuppressWarnings("UnusedParameters")View ignored) { // Parameter 'ignored' never used
    Toast.makeText(this, "Hello", Toast.LENGTH_LONG).show();
}

您会看到此警告,因为未使用符号检查默认启用,并且配置为也显示任何未使用的参数。 虽然在这种特定情况下这不是问题,但它可以帮助您在其他情况下跟踪错误(例如,当您使用具有相似名称的局部变量时,因为拼写错误而不是实际的方法参数)。

此检查提供了许多选项,您可以根据需要对其进行调整,例如通过禁用检查参数选项。 或者,您可以定义@Unused之类的注释,以便 IDE 忽略带有这些注释的任何参数,或者您可以从Alt + Enter菜单、右箭头子菜单(抑制类/方法/语句、编辑检查设置或完全禁用它)。

未使用的符号

压制

因为您从不在方法onClick中使用参数view 但是这个方法的默认签名。

例如,如果您将在方法中使用参数,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>

我您的活动方法是 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;
        }
    }

这是如何使用“视图”的一个示例

上面所说的一切都是伟大而真实的。 这是另一种查看方式:

起初我没有看到需要使用这个参数。 这是因为在我正在处理的应用程序中,只有一个视图(可能是按钮)调用此 OnClick 回调。

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

所以我感到困惑、愤怒或悲伤:

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

...

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

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

我的项目中没有任何东西可以确保前面的陈述。 今天可能是正确的,但在项目后期可能会变得不正确。 它也可能因错误或意外而不真实。 一个简单的错误。

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

所以我选择让这个警告消失的方式是:

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

最后,IDE和API都是对的,错误是假设我不需要这个参数。

警告很明显,方法参数没有在方法的任何地方使用。

但是只看方法可能太狭隘了。 如果您的方法处理诸如 onClick 视图之类的事件: View 参数由侦听器签名强制执行。 如果您删除了参数,您会得到一个异常,如下所示..

 Could not find method buttonClicked(View) in a parent or ancestor Context for android:onClick

理想情况下,Android Studio (IntelliJ) 应该能够识别这种情况并且不应该显示警告,但遗憾的是事实并非如此。

所以我们有两个选择

  1. 禁止显示此警告(Android Studio 工具显示选项)

    @Suppress("UNUSED_PARAMETER")//Kotlin 属性

  2. 在 Log 语句等与逻辑无关的地方使用该参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM