Search code examples
androidbaseadapter

Error for Base Adapter


My problem is when call AllMessageAdapter this BaseAdapter I am set getCount() is 1 but getView(int i, View _view, ViewGroup viewGroup) is call always 3 times in getCount. This BaseAdapter is called in a Fragment

BaseAdapter Code

public class AllMessageAdapter extends BaseAdapter {

    private static LayoutInflater inflater = null;

    public AllMessageAdapter(Context _context, JSONArray jobj, View.OnClickListener listener){
        inflater = (LayoutInflater)_context.getSystemService(_context.LAYOUT_INFLATER_SERVICE);

        Log.e("EEEEEEEEEEEE","NNNNNNNNNNNN");
    }

    @Override
    public int getCount() {
        return 1;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

    @Override
    public long getItemId(int i) {
        return 0;
    }

    @Override
    public View getView(int i, View _view, ViewGroup viewGroup) {
        Log.e("VALUE",""+i);

        View view = _view;
        if(view == null) {
            view = inflater.inflate(R.layout.all_message, null);
        }
        return view;
    }
}

I have Check through Log then Log.e("EEEEEEEEEEEE","NNNNNNNNNNNN"); this is print 1 time but Log.e("VALUE",""+i); is print 3 time. I don't no what is problem.


Solution

  • You can see here the different internal calls to the Adapter.getCount() method.

    But you must keep in mind that you have no control on how this method is gonna be called.

    It can be called multiple times and that's why you have to keep it as fast as possible.

       public class AllMessageAdapter extends BaseAdapter {
    
    private static LayoutInflater inflater = null;
    
    public AllMessageAdapter(Context _context, JSONArray jobj, View.OnClickListener listener){
        inflater = (LayoutInflater)_context.getSystemService(_context.LAYOUT_INFLATER_SERVICE);
    
        Log.e("EEEEEEEEEEEE","NNNNNNNNNNNN");
    }
    
    @Override
    public int getCount() {
        return 1;
    }
    
    @Override
    public Object getItem(int i) {
        return i;
    }
    
    @Override
    public long getItemId(int i) {
        return i;
    }
    
    @Override
    public View getView(int i, View _view, ViewGroup viewGroup) {
        Log.e("VALUE",""+i);
    
        View view = _view;
        if(view == null) {
            view = inflater.inflate(R.layout.all_message, null);
        }
        return view;
    }
    }