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; } } ```