2013-10-02 4 views
0

LinkAdapter - класс, который распространяется на ArrayAdapter.Исключение при вызове getAdapter()

private static List<LinkData> linkDataList = new ArrayList<LinkData>(); 
private LinkAdapter la; 
la = new LinkAdapter(someLinkDataitmes, getActivity()); 
ListView lv = (ListView) v.findViewById(R.id.urls); 
lv.setAdapter(la); 


public class LinkData { 
    private String name, image, description; 

    public LinkData(String name, String image, String description){ 
     this.name = name; 
     this.image=image; 
     this.description=description; 
     } 
} 

Теперь я потом хочу обновить мой listview,

ListView lv = (ListView) v.findViewById(R.id.urls); 
LinkAdapter mListAdapter = ((LinkAdapter)lv.getAdapter()); // this line is giving an error. 
mListAdapter.add(new LinkData(name_val, image_val, description_val)); 
mListAdapter.notifyDataSetChanged(); 

Но код не работает (давая NullPointerException)

Искал много в интернете, но не смог найти конкретный ответ на мою проблему.

+0

Опубликовать Logcat исключения. – Prmths

+0

Почему бы не использовать поле «la», которое вы назначаете при первоначальной установке адаптера? – dymmeh

+0

отправьте больше кода. ваш текущий код даже не будет компилироваться. первый блок кода, помещенный в метод, и post logcat. – wtsang02

ответ

0

Вы никогда не добавляли адаптер в свой ListView, насколько я могу видеть. Адаптер по умолчанию не входит в свой список ListView, поэтому вам нужно его создать и добавить.

Если вы делаете mListAdapter.setAdapter (YOUR_ARRAY_ADAPTER_GOES_HERE); прежде чем вы попытаетесь восстановить его, он должен работать правильно.

NPE - это потому, что вы не можете «получить» ссылку на то, чего никогда не было.

+0

lv.setAdapter (la); Думаю, 5-я линия выполняет эту работу? – Ninja420

0

Я знаю, что это старое сообщение, но у меня была такая же проблема, и я увидел через отладку, что метод getAdapter() в ListView возвращает ListAdapter, который может быть добавлен в HeaderViewListAdapter. Затем на этом адаптере можно вызвать метод getWrappedAdapter(), и результат может быть применен к вашему CustomAdapter.

EDIT! Мне нужно было добавить новый элемент в список после его вставки в базу данных. Создал метод активности, который вставляет мой элемент в список.

private void addItem(Item item) { 
    ListView lstView = (ListView) findViewById(R.id.myCustomListView); 
    HeaderViewListAdapter adapter = (HeaderViewListAdapter) lstView.getAdapter(); 

    MyCustomAdapter customAdapter = (MyCustomAdapter) adapter.getWrappedAdapter(); 

    customAdapter.add(item); 
    customAdapter.notifyDataSetChanged(); 
} 

Я вызываю этот метод после того, как вставил элемент в базу данных.

+0

Было бы полезно добавить код для демонстрации. –

Смежные вопросы