将数据传递给OnItemClickListener?

时间:2011-04-19 01:04:12

标签: java android event-handling

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变量?

2 个答案:

答案 0 :(得分:4)

制作data final,您应该可以使用data

从onItemClick中引用它

答案 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

希望这有帮助。