Universal Image Loader を使用して、お気に入りの画像のグリッドビューを作成しようとしています。現在、画像は表示されず、読み込まれません。同様に、私のデバッグでは、getView が position == 0 でのみ呼び出されることもわかりました。助けてください!
以下にリストします:
ダミー配列リストとカスタム アダプターを作成するフラグメント コード スニペット
フラグメントの xml レイアウト ファイル
Universal Image Loader と、内部に imageView を含む相対レイアウトを保持するビューホルダーを使用するカスタム アダプター。
gridview/viewholder のアイテムの xml レイアウト ファイル。
- FavoritesFragment.java:
public class FavoritesFragment extends Fragment {
private GridView gridView; private Button imageButton; private FavoritesImageAdapter favoritesImageAdapter;
...
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<String> exampleUrls = new ArrayList<String>(); //Used for testing
exampleUrls.add("http://i.imgur.com/gOD1PVH.jpg");
exampleUrls.add("http://i.imgur.com/HB6wZox.jpg");
exampleUrls.add("http://i.imgur.com/gOD1PVH.jpg");
exampleUrls.add("http://i.imgur.com/HB6wZox.jpg");
exampleUrls.add("http://i.imgur.com/HB6wZox.jpg");
exampleUrls.add("http://i.imgur.com/gOD1PVH.jpg");
favoritesImageAdapter = new FavoritesImageAdapter(getActivity(), 0, exampleUrls);
setHasOptionsMenu(true); // Allows the fragment to change the menu buttons
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_favorites, container, false);
gridView = (GridView) view.findViewById(R.id.gridView);
gridView.setAdapter(favoritesImageAdapter);
getActivity().getActionBar().setTitle("Favorites");
return view;
}
}
fragment_favorites.xml:
<GridView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gridView" android:layout_centerVertical="true" android:layout_centerHorizontal="true" android:numColumns="3" android:background="@color/blue_200" android:layout_above="@+id/favoritesButtonLayout"/> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:paddingBottom="10px" android:id="@+id/favoritesButtonLayout"> <Space android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageButton android:layout_weight="10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageButton" android:src="@drawable/ic_action_camera"/> <Space android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <ImageButton android:layout_weight="10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/videoButton" android:src="@drawable/ic_action_video"/> <Space android:layout_weight="1" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/onboardingFavoritesImageView" android:layout_centerVertical="true" android:layout_centerHorizontal="true" />
お気に入りImageAdapter.java:
public class FavoritesImageAdapter は BaseAdapter を拡張します{
LayoutInflater layoutInflater; private Context mContext; private ArrayList<String> imageUrls; private ImageLoader imageLoader; DisplayImageOptions options; public FavoritesImageAdapter(Context context, int resource, ArrayList<String> urls){ layoutInflater = layoutInflater.from(context); mContext = context; this.imageUrls = urls; imageLoader = ImageLoader.getInstance(); options = new DisplayImageOptions.Builder() .showImageForEmptyUri(R.drawable.ic_empty) .showImageOnFail(R.drawable.ic_error) .resetViewBeforeLoading(true) .cacheOnDisk(true) .imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565) .considerExifParams(true) .displayer(new FadeInBitmapDisplayer(300)) .build(); } @Override public int getCount() { Log.d("howmany", ""+imageUrls.size()); return imageUrls.size(); } @Override public Object getItem(int position) { return imageUrls.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { final FavoritesImageViewHolder favoritesImageViewHolder; final String url = (String)getItem(position); //TODO If the cast works delete this TODO if(convertView == null){ RelativeLayout rootView = (RelativeLayout) layoutInflater.inflate(R.layout.item_grid_favorites_image, parent, false); favoritesImageViewHolder = FavoritesImageViewHolder.create(rootView); rootView.setTag(favoritesImageViewHolder); } else{ favoritesImageViewHolder = (FavoritesImageViewHolder) convertView.getTag(); } imageLoader.displayImage((String)getItem(position), favoritesImageViewHolder.imageView, options, new SimpleImageLoadingListener() {//TODO If the cast works delete this TODO @Override public void onLoadingStarted(String imageUri, View view) { //holder.progressBar.setProgress(0); //holder.progressBar.setVisibility(View.VISIBLE); Log.d("doesthishappen", "yes0"); } @Override public void onLoadingFailed(String imageUri, View view, FailReason failReason) { //holder.progressBar.setVisibility(View.GONE); Log.d("doesthishappen", "yes1"); } @Override public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { //holder.progressBar.setVisibility(View.GONE); Log.d("doesthishappen", "yes2"); } }, new ImageLoadingProgressListener() { @Override public void onProgressUpdate(String imageUri, View view, int current, int total) { //holder.progressBar.setProgress(Math.round(100.0f * current / total)); } } ); return favoritesImageViewHolder.rootView; } /** * ViewHolder's allow for a single object to maintain a Goal row item, so that the row item * doesn't have to create each individual component (textview layout etc.) each time the * row object is created/recreated. Allows for fast scrolling with little latency. */ private static class FavoritesImageViewHolder { public final RelativeLayout rootView; public final ImageView imageView; private FavoritesImageViewHolder(RelativeLayout rootView, ImageView imageView) { this.rootView = rootView; this.imageView = imageView; } public static FavoritesImageViewHolder create(RelativeLayout rootView){ ImageView imageView = (ImageView)rootView.findViewById(R.id.favoritesMediaView); return new FavoritesImageViewHolder(rootView, imageView); } }
}
item_grid_favorites_image.xml:
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/favoritesMediaView" android:layout_centerVertical="true" android:layout_centerHorizontal="true" />
なぜこれが起こっているのかわかりません。6 つの偽の URL すべてがアダプターに渡されていることはわかっています。また、getView メソッドが 6 回呼び出されていることもわかっています。また、Universal Image Loader が onLoadingComplete() コールバック メソッドに到達することはありませんが、onLoadingStarted() を 6 回呼び出します。これらの 6 回すべてで、arraylist の位置 0 が使用されます。助けてください、私はこのサイドプロジェクトを通じてアンドロイドが上手くなりたいと思っています. また、冒頭のコードフォーマットエラーについてお詫び申し上げます。修正しようとしましたが、うまくいきませんでした。