Передать данные в OnItemClickListener? - PullRequest
0 голосов
/ 19 апреля 2011
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 ]

4 голосов
/ 19 апреля 2011

make data final, и вы сможете ссылаться на него изнутри onItemClick с помощью data

3 голосов
/ 19 апреля 2011
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 не имеет представления об этом внутреннем классе.

Файлы внутреннего класса переводятся в отдельные файлы классов, в которых есть комбинация файла внешнего класса и файла внутреннего класса, разделенных знаком "$". Поскольку в данном случае это Anonymous, целые числа используются для идентификации внутреннего класса.

OuterClass$1.class

В приведенном выше сценарии, когда вы создаете переменную в классе Outer, внутренний класс не будет об этом знать. Однако, когда вы помечаете его как final, внутренний класс (фактический файл класса) получит скрытую переменную внутри него со ссылкой на переменную внешнего класса.

data$data

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...