2012-08-22 17 views
3

這裏的代碼,我有問題:Android的列表視圖 - 監聽器必須重寫超類方法

 listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     @Override 
     public void onItemClick(AdapterView<?> parent, android.view.View view, 
       int position, long id) { 

      if(listview.isItemChecked(position)){ 

      } 

      if(listview.getCheckedItemCount()>1){ 

      } 

     } 
    }); 

它口口聲聲說聽者必須重寫超類方法,而我不能稱之爲內內非final的變量「列表視圖」類。我應該如何調用listview.isItemChecked(position)呢?謝謝

+1

檢查並查看該項目的合規性(右鍵單擊項目 - >屬性 - > Java的反編譯>編譯法規遵從>讓1.6)。在java中你不能在匿名內部類中使用一個變量,除非它是'final'。你可以使'listview'變量爲final,或者使用'parent'參數,它實際上是你設置監聽器的'ListView'。 – Luksprog

+0

http://stackoverflow.com/a/5997998/726863 –

+0

我檢查了一下,我有1.7。並感謝,我已經修復該列表視圖的問題。 –

回答

3

我建議你閱讀在Java中使用final。從技術上講,您可以通過在ListView listview = ...之前添加關鍵字final來解決此問題,因此final ListView listview = ...

但是,更好的選擇是在您的OnItemClick-方法中使用傳遞給ListView的引用。參數AdapterView<?> Parent對應於您的ListView,所以你可以使用下面的代碼:

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> parent, android.view.View view, 
      int position, long id) { 

     ListView lv = (ListView) parent; 

     if(lv.isItemChecked(position)){ 
      // ... 
     } 

     if(lv.getCheckedItemCount()>1){ 
      // ... 
     } 

    } 
}); 
+0

是的,我在此期間解決了這個問題:)但是超類方法問題仍然存在..無論如何感謝 –

+0

哦,對不起,我錯過了那部分。在這種情況下,請確保您使用的是Java 1.6或更高版本(請參閱Luksprog的評論)。 – Reinier

+0

是的,我用的是1.7 –

相關問題