private void fillList() { listView = findViewById(R.id.listView); ListAdapter listAdapter = new ListAdapter() { @Override public void registerDataSetObserver(DataSetObserver observer) { } @Override public void unregisterDataSetObserver(DataSetObserver observer) { } @Override public int getCount() { Log.d(TAG, "getCount called. jsonArray.length() = " + jsonArray.length()); return jsonArray.length(); } @Override public Object getItem(int position) { Log.d(TAG, "getItem called with " + position); try { return jsonArray.get(position); } catch (JSONException e) { return null; } } @Override public long getItemId(int position) { try { return jsonArray.getJSONObject(position).getLong("id"); } catch (JSONException e) { e.printStackTrace(); return -1; } } @Override public boolean hasStableIds() { return true; } @Override public View getView(int position, View convertView, ViewGroup parent) { View view = convertView; if (view == null) { view = getLayoutInflater().inflate(R.layout.cell, parent, false); } TextView left = view.findViewById(R.id.cell); left.setText(String.format("zelle %d", position)); view.setOnClickListener(listener); view.setTag(position); return view; } @Override public int getItemViewType(int position) { return 0; } @Override public int getViewTypeCount() { return 1; } @Override public boolean isEmpty() { Log.d(TAG, "isEmpty called. jsonArray.length() = " + jsonArray.length()); return jsonArray == null || jsonArray.length() == 0; } @Override public boolean areAllItemsEnabled() { return true; } @Override public boolean isEnabled(int position) { return true; } }; listView.setAdapter(listAdapter);