Я пытаюсь создать сетку для любимых изображений с помощью универсального загрузчика изображений. В настоящее время изображения не отображаются и не загружаются. Точно так же моя отладка также обнаружила, что getView вызывается только с position == 0. Пожалуйста, помогите!
Ниже я перечисляю:
Фрагменты кода, создающие фиктивный список массивов и пользовательский адаптер.
XML-файл макета фрагмента
Пользовательский адаптер, который использует универсальный загрузчик изображений и средство просмотра, которое содержит относительный макет с изображением внутри.
XML-файл макета элемента для gridview/viewholder.
- FavoritesFragment.java:
открытый класс FavoritesFragment расширяет фрагмент {
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" />
ИзбранноеИзображениеАдаптер.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 раз используют позицию 0 массива. Пожалуйста, помогите, я надеюсь стать лучше в Android с помощью этого побочного проекта. Также прошу прощения за ошибки форматирования кода в начале. Я пытался исправить это, но это не сработало.