dynamically add layout into getview method of adaptor in android

android, android-arrayadapter, imageview

Solution

Check this is what you want I guess. Just set random value for each line in images

    public class MyAdapter extends BaseAdapter {
    private LayoutInflater inflater;
    private ArrayList<String> data;
    Context con;

    public MyAdapter(Context context, ArrayList<String> data1) {

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

        data = data1;
        con = context;
    }

    public View getView(int position, View view, ViewGroup viewgroup) {
        ViewHolder holder = new ViewHolder(); // our view holder of the row
        if (view == null) {

            HorizontalScrollView hr = new HorizontalScrollView(con);
            LinearLayout layout = new LinearLayout(con);
            layout.setLayoutParams(new LinearLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            for (int i = 0; i < data.size(); i++) {
                holder.image = new ImageView(con);
                layout.addView(holder.image);
                holder.image.setImageResource(R.drawable.ic_launcher);
            }
            hr.addView(layout);
            view = hr;

            view.setTag(holder);

        }
        holder = (ViewHolder) view.getTag();

        return view;

    }

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

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

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

class ViewHolder {
    ImageView image;
    TextView title;
    TextView type;
    HorizontalScrollView hr;
}

Problem

I want to display N number of imageview in every row of list view. Number of imageview depends on json parsing value. it can be 2 or 3 or 4 everytime when i fetch json from server. so I can not use static xml by using inflate.so i decided to create dynamic view in getview method and add N number of imageview into view I write following code but it still display only one imageview and horizontal scroll wont work at all.. any help is appreciated ``` public class MyAdapter extends BaseAdapter{ private LayoutInflater inflater; private ArrayList<String> data; Context con; public MyAdapter(Context context, ArrayList<String> data1){ // Caches the LayoutInflater for quicker use inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); // Sets the events data data= data1; con=context; } public View getView(int position, View view, ViewGroup viewgroup) { ViewHolder holder=new ViewHolder(); //our view holder of the row if (view == null) { HorizontalScrollView hr=new HorizontalScrollView(con); LinearLayout layout=new LinearLayout(con); layout.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); //layout set some properties for(int i=1;i<2;i++) { holder.image =new ImageView(con); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(100*i, 100*i); holder.image.setLayoutParams(layoutParams); layout.addView(holder.image); } //subtitle set some properties //CREATING THE LAYOUT THROUGH CODE hr.addView(layout); view = hr; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT //bind the views of the holder to the views of the layout view.setTag(holder); Log.w("myapp", "new view"); } else { holder = (ViewHolder) view.getTag(); Log.w("myapp", "in reuse"); } //rest of implementation of the View for(int i=0;i<2;i++) { holder.image.setImageResource(R.drawable.ic_launcher); } return view; } static class ViewHolder { ImageView image; TextView title; TextView type; HorizontalScrollView hr; } @Override public int getCount() { // TODO Auto-generated method stub return 4; } @Override public Object getItem(int position) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return 1; } } ```

Original source

Related problems