[英]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 回調。
也就是說,無需檢查參數。 只有一個按鈕,它必須是它。
所以我感到困惑、憤怒或悲傷:
...
但我們可以用另一種方式看待它:
無需檢查參數。 只有一個按鈕,一定是它
我的項目中沒有任何東西可以確保前面的陳述。 今天可能是正確的,但在項目后期可能會變得不正確。 它也可能因錯誤或意外而不真實。 一個簡單的錯誤。
當開發人員希望應用程序易於維護時,他會怎么做? 他檢查或確保他想要真實的事實。
所以我選擇讓這個警告消失的方式是:
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) 應該能夠識別這種情況並且不應該顯示警告,但遺憾的是事實並非如此。
所以我們有兩個選擇
禁止顯示此警告(Android Studio 工具顯示選項)
@Suppress("UNUSED_PARAMETER")//Kotlin 屬性
在 Log 語句等與邏輯無關的地方使用該參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.