2011-04-19 143 views
0
DataAccess data = new DataAccess(db); 
List<String> countries = data.getCountries(); 

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, countries)); 

ListView lv = getListView(); 
lv.setTextFilterEnabled(true); 

lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

     // When clicked, show a toast with the TextView text 
     Toast.makeText(getApplicationContext(), ((TextView) view).getText(), 
     Toast.LENGTH_SHORT).show(); 
    } 
}); 

如何從onItemClick方法內部傳遞和訪問data變量?將數據傳遞給OnItemClickListener?

回答

4

使datafinal,你應該能夠從內部onItemClick與data

3
final DataAccess data = new DataAccess(db); 


lv.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, 
     int position, long id) { 

     List<String> countries = data.getCountries(); 
    } 
} 

引用它是有原因的,爲什麼我們這樣做。當你調用「new OnItemClickListener()」時,你基本上創建了一個匿名的內部類。生成的字節碼實際上不會轉化爲內部類,JVM不知道這個內部類。

將內部類文件轉換爲單獨的類文件,該類文件具有由「$」符號分隔的外部類文件和內部類文件的組合。由於這種情況是匿名的,因此用整數來標識內部類。

OuterClass$1.class 

在上面的場景中,當你在Outer類中創建一個變量時,內部類將不知道它。 然而,當你將它標記爲final時,內部類(實際的類文件)將通過引用外部類變量來獲得隱藏變量。

data$data 

希望這會有所幫助。

+0

不錯的解釋..... – 2011-04-19 04:21:13