Проблема адаптера с getTag (), возвращает ноль - PullRequest
1 голос
/ 19 сентября 2011

это мой заголовок

public class MyAdapter extends ResourceCursorAdapter implements OnScrollListener {

в моем адаптере я установил тег вот так

        public View newView(Context context, Cursor cursor, ViewGroup parent) {
                final View view = super.newView(context, cursor, parent);
                final MyCache cache = new MyCache();
            view.setTag(cache); 
            }

чем у меня есть метод

public void metA(){
//here I want to read the tag
//how can I do that ?
}

Я также реализую слушатель прокрутки

public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
//how to read for example the third item in the list ?
//item.getTag() returns null
}

Я пытался с getItem (0), но я также получаю исключения нулевого указателя ... Как правильно читать теги в методе onScroll, что на самом деле содержит представление? Я знаю, что делаю что-то очень глупое, но не могу понять.

1 Ответ

0 голосов
/ 19 сентября 2011

Для метода getTag() вы должны попытаться удалить ключевое слово final из вашей декларации View, это может быть проблемой (я не уверен на 100%).Также я не уверен, что делает класс MyCache() и почему вам нужно установить MyCache объект для каждого View.Возможно, было бы лучшим решением просто добавить один MyCache экземпляр в качестве переменной класса адаптера.

А для метода getItem() убедитесь, что вы правильно реализовали этот метод и что вы возвращаетеэлемент из вашего списка объектов.

Чтобы получить тег от View, вам просто нужно использовать:

   (MyCache)view.getTag();

Редактировать: , чтобы получить View tag в вашем методе getView(), просто используйте параметр convertView метода getView():

       public View getView(int position,View convertView,ViewGroup parent){
            if(convertView!=null)
                 (MyCache)convertView.getTag();
            // code....
       }
...