AndroidでList内にGridで複数の画像を表示させたいのですが、1度目の表示では画像が表示されず、
2回目以降の表示では画像が読み込まれた状態で表示がされます。
1度目の画面表示で画像を表示させることができないので困っています。
■呼び出し元のAdapter
lang
1import android.content.Context; 2import android.util.Log; 3import android.view.LayoutInflater; 4import android.view.View; 5import android.view.ViewGroup; 6import android.widget.BaseAdapter; 7import android.widget.GridView; 8import android.widget.ListAdapter; 9import android.widget.TextView; 10 11import java.util.ArrayList; 12 13import hogehoge.model.GridviewObject; 14import hogehoge.model.postStoryComment; 15 16public class StoryCommentListviewImageLoaderAdapter extends BaseAdapter{ 17 18 private Context activity; 19 private ArrayList<postStoryComment> data; 20 private static LayoutInflater inflater = null; 21 private View vi; 22 private ViewHolder viewHolder; 23 GridviewInListviewAdapter mAdapter; 24 ArrayList<GridviewObject> mArray = new ArrayList<GridviewObject>(); 25 GridviewAdapter mGrid; 26 int numImg; 27 28 public StoryCommentListviewImageLoaderAdapter(Context context, ArrayList<postStoryComment> items) { 29 this.activity = context; 30 this.data = items; 31 inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 32 } 33 34 @Override 35 public int getCount() { 36 return data.size(); 37 } 38 39 @Override 40 public Object getItem(int i) { 41 return i; 42 } 43 44 @Override 45 public long getItemId(int i) { 46 return i; 47 } 48 49 @Override 50 public View getView(int position, View view, ViewGroup viewGroup) { 51 vi = view; 52 final int pos = position; 53 postStoryComment items = data.get(pos); 54 if(view == null) { 55 Log.d("LogD", "IF Adapter"+view+" , Position : "+position); 56 57 vi = inflater.inflate(R.layout.comment_itemlist, null); 58 viewHolder = new ViewHolder(); 59 viewHolder.name = (TextView) vi.findViewById(R.id.psCommentUser); 60 viewHolder.date = (TextView) vi.findViewById(R.id.psCommentDate); 61 viewHolder.content = (TextView) vi.findViewById(R.id.psCommentTxt); 62 mGrid = (GridviewAdapter) vi.findViewById(R.id.commentgridview); 63 64 vi.setTag(viewHolder); 65 }else 66 viewHolder = (ViewHolder) view.getTag(); 67 viewHolder.name.setText(items.getUser()); 68 viewHolder.date.setText(items.getDate()); 69 viewHolder.content.setText(items.getContent()); 70 71 mArray.clear(); 72 numImg=0; 73 String testUrl = items.getImg(); 74 75 String[] separated = testUrl.split(","); 76 numImg = separated.length; 77 if(!testUrl.equals("")) { 78 Log.d("LogD", "DO Gridview : "+position); 79 80 for (String item : separated) { 81 Log.d("LogD", "add : " + item); 82 mArray.add(new GridviewObject(item)); 83 } 84 Log.d("LogD", "NumImg : " + numImg); 85 mAdapter = new GridviewInListviewAdapter(activity, mArray); 86 mGrid.setNumColumns(numImg); 87 mGrid.setAdapter(mAdapter); 88 setDynamicWidth(mGrid); 89 } 90 91 92 93 return vi; 94 } 95 public ArrayList<postStoryComment> getAllData(){ 96 return data; 97 } 98 99 100 public class ViewHolder{ 101 TextView name; 102 TextView date; 103 TextView content; 104 GridviewAdapter gridview; 105 TextView image; 106 } 107 108 private void setDynamicWidth(GridView gridView) { 109 ListAdapter gridViewAdapter = gridView.getAdapter(); 110 if (gridViewAdapter == null) { 111 return; 112 } 113 int totalWidth; 114 int items = gridViewAdapter.getCount(); 115 View listItem = gridViewAdapter.getView(0, null, gridView); 116 listItem.measure(0, 0); 117 totalWidth = listItem.getMeasuredWidth(); 118 totalWidth = totalWidth*items; 119 ViewGroup.LayoutParams params = gridView.getLayoutParams(); 120 params.width = totalWidth; 121 gridView.setLayoutParams(params); 122 } 123} 124
■呼び出し先のAdapter
lang
1 2import android.content.Context; 3import android.view.LayoutInflater; 4import android.view.View; 5import android.view.ViewGroup; 6import android.widget.ImageView; 7import android.widget.BaseAdapter; 8 9import com.squareup.picasso.Picasso; 10 11import java.util.ArrayList; 12 13import hogehoge.model.GridviewObject; 14import hogehoge.R; 15 16public class GridviewImageLoaderAdapter extends BaseAdapter{ 17 18 Context mContext; 19 ArrayList<GridviewObject> mArray = new ArrayList<GridviewObject>(); 20 private static LayoutInflater inflater = null; 21 22 public GridviewImageLoaderAdapter(Context context, ArrayList<GridviewObject> objects) { 23 24 this.mContext = context; 25 this.mArray = objects; 26 inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 27 } 28 29 @Override 30 public int getCount() { 31 return mArray.size(); 32 } 33 34 @Override 35 public Object getItem(int i) { 36 return i; 37 } 38 39 @Override 40 public long getItemId(int i) { 41 return i; 42 } 43 44 public class ViewHolder { 45 46 ImageView mImage; 47 48 } 49 50 @Override 51 public View getView(int position, View convertView, ViewGroup parent) { 52 53 ViewHolder holder; 54 55 GridviewObject object = mArray.get(position); 56 57 if (convertView == null) { 58 convertView = inflater.inflate(R.layout.gridview_item_comment, parent,false); 59 holder = new ViewHolder(); 60 holder.mImage = (ImageView) convertView.findViewById(R.id.gvItem); 61 convertView.setTag(holder); 62 }else{ 63 holder = (ViewHolder) convertView.getTag(); 64 } 65 66 67 Picasso.with(mContext).load(object.getImgUrl()).fit().into(holder.mImage); 68 69 return convertView; 70 71 } 72}
うまくいかないではわかりません。
なにがどうなっているのか詳細に書いてください。