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();
}
});
如何从data
方法内传递和访问onItemClick
变量?
答案 0 :(得分:4)
制作data
final
,您应该可以使用data
答案 1 :(得分: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
希望这有帮助。