List View adapter not working, getView not called.

I think i'm turning crazy. Something so simple has bind a custom adapter to a Listview is giving me a headache.

Post the code and explain then:

MainActivity.java

package com.example.pruebalist;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

    private static String[] data = new String[] {"0","1","2","3"};

    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        Log.v("MainActivity","Inside MainActivity");
        setContentView(R.layout.main);
        ListView lstView = (ListView)findViewById(R.id.listNoticias);

        ArrayAdapter<String> adapter = new LstAdapter(this, R.layout.row, data);
        lstView.setAdapter(adapter);
    }

}

LstAdapter.java

package com.example.pruebalist;

import android.app.Activity;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;

public class LstAdapter extends ArrayAdapter<String>{

    private String[] mData;
    private Context mContext;
    int layoutResourceId;

    public LstAdapter(Context context, int textViewResourceId, String[] values) {
        super(context, textViewResourceId, values);
        mContext = context;
        mData = values;
        layoutResourceId = textViewResourceId;

        Log.v("LstAdapter","Inside LstAdapter");
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        View v = convertView;
        Log.v("LstAdapter","Inside getView");

        if(v==null){
            LayoutInflater inflater = ((Activity)mContext).getLayoutInflater();
            v = inflater.inflate(layoutResourceId, parent,false);
        }

        String item = mData[position];
        if(item!=null){
            TextView txtItem = (TextView)v.findViewById(R.id.texto);
            if(txtItem!=null){
                txtItem.setText(item);
            }
        }

        return v;
    }

}

The ListView is never show. And getView is never used, logCat doesn't show "Inside Getview".

What's wrong?

Answers


Main problem is

@Override
    public int getCount() {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

change it to

@Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mData.length;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return mData[arg0];
    }

Check out this Vogella Tutorial on List View & List Activity, Try to use ViewHolder in List Adapter it will increase your view performance.


This is because you left the default implementation of getCount() method which returns 0, so the Adapter thinks there are no elements to display in ListView.

It should return mData.length

@Override
public int getCount() {
   return mData.length;
}

You have not implemented getCount() and getItemId(...).

You can just take out those methods and use the defaults if you do not plan on needing custom implementation for them.

Take them out for now and then try.


The right way of doing this is to call super(context, textViewResourceId, values) - which you are already doing. In that case you can remove the getCount() and getItemId(...) functions completely. The class which your List is derrived from will automatically return the correct values.

  • Cheers

Need Your Help

Creating a clickable area in HTML/CSS/JavaScript

javascript jquery html css

So I have this code that I created with some help:

Cancel AddNew row to datagrid

c# wpf datagrid combobox wpftoolkit

I have Datagrid , I am using an Observable Collection as data-source of my datagrid. I am populating my Datagrid from the selected value of a combobox .The combobox has only 2 values: Direct Bill a...