我正在尝试使用通用图像加载器为最喜欢的图像创建一个网格视图。目前,没有图像出现或加载。同样,我的调试也发现 getView 仅在 position == 0 时调用。请帮助!
下面我列出:
创建虚拟数组列表和自定义适配器的片段代码片段
片段的xml布局文件
使用 Universal Image Loader 的自定义适配器和一个 viewholder,其中包含一个相对布局和一个 imageView。
gridview/viewholder 的项目的 xml 布局文件。
- 收藏夹Fragment.java:
公共类收藏夹片段扩展片段{
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;
}
}
片段收藏夹.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:
公共类 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。请帮忙,我希望通过这个项目在 android 上变得更好。另外,对于开头的代码格式错误,我深表歉意。我试图修复它,但它不起作用。