2011-04-19 107 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