NullPointerException bei ArrayAdapter .insert()

  • Antworten:0
monsterbit
  • Forum-Beiträge: 1

12.02.2014, 13:55:15 via Website

Hi,

in meiner App soll der User die Möglichkeit haben Items in den Navigation Drawer einzufügen. Um die ListView im Navigation Drawer darzustellen, habe ich einen eigen ArrayAdapter implementiert.
Alles funktioniert wunderbar, bis zu dem Punkt an dem der User ein Item in die Liste einfügen will. Komischerweise funktioniert arrayAdapter.add(), aber da ich das Item an einer bestimmten Position einfügen will und ich dafür arrayAdapter.insert() benutzer, gibt er mir immer eine NullPointerException.

Hier ist der Code
ArrayAdapter:

1public class DrawerListAdapter extends ArrayAdapter<Item>{
2
3 private List<Item> drawerData;
4
5 //The enum defines the two types of list items
6 public enum RowType {
7 ROW_HEADER, ROW_ITEM
8 }
9
10 //Layoutinflater
11 private LayoutInflater inflater;
12
13 public DrawerListAdapter(Context context, List<Item> objects) {
14 super(context, 0, objects);
15
16 this.drawerData = objects;
17
18 inflater = LayoutInflater.from(context);
19 }
20
21 @Override
22 public int getViewTypeCount() {
23 return RowType.values().length;
24 }
25
26 @Override
27 public int getItemViewType(int position) {
28 return getItem(position).getViewType();
29 }
30
31 @Override
32 public View getView(int position, View convertView, ViewGroup parent) {
33 return getItem(position).getView(inflater, convertView);
34 }
35
36 @Override
37 public void insert(Item item, int index) {
38 drawerData.add(index, item);
39 notifyDataSetChanged();
40 }
41}

Hier füge ich mein neues Item in die Liste ein:

1private void addCounter() {
2 final EditText input = new EditText(this);
3
4 new AlertDialog.Builder(MainActivity.this)
5 .setTitle(R.string.dialog_counter_title)
6 .setMessage(R.string.dialog_counter_message)
7 .setView(input)
8 .setPositiveButton(R.string.dialog_counter_positive, new DialogInterface.OnClickListener() {
9 public void onClick(DialogInterface dialog, int whichButton) {
10 Editable value = input.getText();
11 dlAdapter.insert(new ListItemCounter(value.toString(), R.drawable.ic_timer_light),
12 dlAdapter.getCount() - 4);
13 }
14 }).setNegativeButton(R.string.dialog_counter_negative, new DialogInterface.OnClickListener() {
15 public void onClick(DialogInterface dialog, int whichButton) {
16 // Do nothing.
17 }
18 }).show();
19 }

Und das ist meine ListItemCounter Klasse, die im Übringen auch getView überschreibt, wo ich dann die NullPointerException bekomme:

1public class ListItemCounter implements Item{
2
3 private final String itemTitle;
4 private final int itemIcon;
5
6 public ListItemCounter(String title, int icon) {
7 this.itemTitle = title;
8 this.itemIcon = icon;
9 }
10
11 @Override
12 public int getViewType() {
13 return RowType.ROW_ITEM.ordinal();
14 }
15
16 @Override
17 public View getView(LayoutInflater inflater, View convertView) {
18 View view;
19 if (convertView == null) {
20 view = (View) inflater.inflate(R.layout.drawer_item_counter, null);
21
22 } else {
23 view = convertView;
24 }
25
26 TextView title = (TextView) view.findViewById(R.id.drawer_item_counter_title);
27 ImageView icon = (ImageView) view.findViewById(R.id.drawer_item_counter_icon);
28
29 title.setText(itemTitle); // <-- NullPointerException!
30 icon.setImageResource(itemIcon);
31
32 return view;
33 }
34}

Das Komische ist, wie bereits erwähnt, dass add() keine Exception wirft, insert() aber schon. Nach ein bisschen Debugging habe ich auch rausgefunden, dass TextView title und ImageView icon null sind, was ich nicht verstehe, weil im "ersten Durchlauf", wenn die Liste initialisiert wird, können die Views ja auch gefunden werden??

Um Hilfe wäre ich sehr dankbar und schon vielen Dank im Voraus!

Antworten