簡體   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