Можно ли передавать действие ListView как (это) в экземпляр объекта, т.е. ArrayAdapter? - PullRequest
0 голосов
/ 09 июля 2011

У меня есть просмотр списка NoteList, который содержит метод doListRefresh() для выбора содержимого списка из таблицы sqlite note, заполняет курсор (который заполняет мой array adapter), затем вызывает adapter.notifyDataSetChanged();, чтобы обновить список , После (добавить, изменить, удалить и т. Д.)

Внутри моего пользовательского Array adapter я заполняю несколько элементов в каждой строке, включая кнопку удаления. Внутри array adapter у меня есть обработчик кнопки onClick и т. Д. Мне нужно вызвать NoteList.doListRefresh() изнутри моего Array adapter, и я делаю это с помощью установщика внутри моего array adapter, который вызывается из NoteList что-то как adapter.setNoteListObj(this);. Это работает, но я не уверен, что это лучший способ?

Я хотел спросить, является ли это «наилучшей практикой» для подобных действий?

Спасибо за любой совет

Вот пример кода:

Внутри NoteList:

onCreate(Bundle savedInstanceState) {
  thisObject = this;
}

// set custom ArrayAdapter to the data
adapter =  new NoteArrayAdapter(activity, R.layout.channel_note_list_item, noteList);
adapter.setNoteList(thisObject);

...

внутри адаптера:

private NoteList callingNoteListObj;

... 

// setter
protected void setNoteList(NoteList _callingNoteListObj) {
  this.callingNoteListObj = _callingNoteListObj;
}

...

// within delete onclick handler (after delete)
// refresh local database
callingNoteListObj.doListRefresh();

1 Ответ

0 голосов
/ 09 июля 2011

Не понимаю, почему нет. Все, что вы делаете, это передаете ссылку на экземпляр («указатель» для тех, кто сделал больше, чем Java). Лично я передам this в конструктор вашего адаптера и сохраню ссылку локально. Фактически, вы, вероятно, уже делаете это, если передаете this в качестве объекта Context для создания ArrayAdapter. Так как это ваш пользовательский адаптер для вашего пользовательского NoteList, вы можете просто привести context (или this.getContext()) к NoteList и вызвать его без необходимости использовать сеттер.

...