有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java是否将数据传递给McClickListener?

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


共 (2) 个答案

  1. # 1 楼答案

    制作datafinal,你应该能够在onItemClick中用data引用它

  2. # 2 楼答案

    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 McClickListener()”时,实际上是在创建一个匿名内部类。生成的字节码实际上不会转换为内部类,JVM对这个内部类一无所知

    内部类文件被转换为单独的类文件,其中包含外部类文件和内部类文件的组合,并用“$”符号分隔。由于这种情况是匿名的,所以使用整数来标识内部类

    OuterClass$1.class
    

    在上面的场景中,当您在外部类中创建变量时,内部类将对此一无所知。 但是,当您将其标记为final时,内部类(实际的类文件)将在其中获得一个隐藏变量,并引用外部类变量

    data$data
    

    希望这有帮助