1

Below is the code for mycustom adapter.Getview is not being called in custom adapter I debugged and I found position was being returned as -1 in method

@Override
    public Object getItem(int position) {

        return result.get(position);
    }

ArrayList   <searchObjects> result ;
        String [] title;
        Context context;
        int [] imageId;
        private static LayoutInflater inflater=null;
        public CustomAdapter(searchresults mainActivity, 
    ArrayList<searchObjects> prgmNameList, int[] prgmImages) {       
            result=prgmNameList;
            context=mainActivity;
            imageId=prgmImages;

            inflater = ( LayoutInflater )context.
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);

I am calling custom adapterlike this

 lv = (ListView) findViewById(R.id.listView);

        cst= new CustomAdapter(this, objects, prgmImages);
        lv.setAdapter(cst);

My full custom adapter:

public class CustomAdapter extends BaseAdapter {
   ArrayList   <searchObjects> result ;
    String [] title;
    Context context;
    int [] imageId;
    private static LayoutInflater inflater=null;
    public CustomAdapter(searchresults mainActivity, ArrayList<searchObjects> prgmNameList, int[] prgmImages) {
        // TODO Auto-generated constructor stub
        result=prgmNameList;
        context=mainActivity;
        imageId=prgmImages;

        inflater = ( LayoutInflater )context.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        Log.d("Custom get Item1", String.valueOf(result.size()));
        return result.size();
        //return 2;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        Log.d("Custom get Item", String.valueOf(result.size()));
        return result.get(position);
    }

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

    public class Holder
    {
        TextView tv;
        TextView tv1;
        ImageView img;
    }
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        Log.d("My custome adapter 1", "in view");
        Holder holder=new Holder();
        View rowView;
        rowView = inflater.inflate(R.layout.searchlist, null);
        holder.tv1=(TextView) rowView.findViewById(R.id.txtvwsrchlistitemname);
        holder.img=(ImageView) rowView.findViewById(R.id.icon);
        holder.img.setImageResource(imageId[0]);


        holder.tv1.setText(result.get(position).tmpSearchtitle);

        return rowView;
    }

}

Main activity code

AsyncCallWS task = new AsyncCallWS();
        task.execute();


        lv = (ListView) findViewById(R.id.listView);

        cst= new CustomAdapter(this, objects, prgmImages);
        lv.setAdapter(cst);
        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Object listItem = lv.getItemAtPosition(position);
                Log.d(" Search results", " search results link cliked");
                Intent browser = new Intent(searchresults.this, locationdetails.class);
                startActivity(browser);

            }
        });

2 Answers2

1
public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder = null;

        LayoutInflater mInflater = (LayoutInflater) 
            context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout. searchlist, null);
            holder = new Holder();
            holder.txtDesc = (TextView) convertView.findViewById(R.id. txtvwsrchlistitemname);

            holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }

        searchObjects rowItem = (searchObjects) getItem(position);

        holder.txtDesc.setText(rowItem.getDesc());

        holder.imageView.setImageResource(rowItem.getImageId());

        return convertView;
    }

/** Your Pogo Class **/

public class searchObjects {
    private int imageId;

    private String desc;

    public searchObjects(int imageId,String desc) {
        this.imageId = imageId;

        this.desc = desc;
    }
    public int getImageId() {
        return imageId;
    }
    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }

}
Amit Ranjan
  • 547
  • 2
  • 11
0

After seeing code I can suggest to you , if you'r using AsyncTask then you should update your UI in onPostExecute() method. So set your custom adapter in that method.

 @Override
 protected void onPostExecute(String result) {
    cst= new CustomAdapter(this, objects, prgmImages);
    lv.setAdapter(cst);
 }

Also in custom adapter use ViewHolder pattern in getView() method which will prevent the duplication items while scrolling listView.

Piyush
  • 335
  • 3
  • 23