我正在尝试使用通用图像加载器为最喜欢的图像创建一个网格视图。目前,没有图像出现或加载。同样,我的调试也发现getView仅在位置==0时调用。请帮助!
下面我列出:
>
创建虚拟数组列表和自定义适配器的片段代码片段
片段的 xml 布局文件
使用通用图像加载程序的自定义适配器和一个视图持有者,该视图持有者内部装有图像视图的相对布局。
gridview/viewholder的项的xml布局文件。
公共类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;
}
}
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" />
收藏夹图像适配器.java:
公共类收藏夹图像适配器扩展了 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。另外,我为开头的代码格式错误道歉。我试图修理它,但是它不起作用。
我发现了答案。我应该有一个与这个基本相同的item_grid_favorites_image.xml:https://github.com/nostra13/Android-Universal-Image-Loader/blob/master/sample/res/layout/item_grid_image.xml
如果您想知道这是如何工作的:
之前,我使用了一个相对布局fill_parent高度的item_grid_favorites_image.xml,这导致通用图像加载器加载图片需要很长时间。这也是为什么onLoadingStarted()被调用了6次,而onLoadingFinal()被调用了0次。它只是被加载时间耽搁了。
直到我变成白痴
希望它能帮助你
if(convertView == null){
RelativeLayout rootView = (RelativeLayout) layoutInflater.inflate(R.layout.item_grid_favorites_image, parent, false);
favoritesImageViewHolder = FavoritesImageViewHolder.create(rootView);
rootView.setTag(favoritesImageViewHolder);
//add this code to your adapter
favoritesImageViewHolder.imageView.setTag(position);
}
@eduardowarded:我观察到的是你正在使用持有人模式进行快速滚动。我可以建议你在收藏夹中添加新的属性图像视图持有人作为int位置。在 getVirew 方法中,您必须分配收藏夹图像查看持有者.要访问位置,您应该使用收藏夹图像视图持有者。出现这种类型的问题是因为在滚动列表时,将调用getView
并且它未同步,从而导致线程更新值。
我希望这能帮助你解决你的问题。
问题内容: 我知道互联网上有成千上万个示例,但是对于脚本,我已经必须在检索数据时显示加载的gif图像。我的Java知识很差,因此我想问如何更改以下内容: 我的div在这里: 谢谢。约翰 问题答案: 假设您在页面上某处有一个标签,其中包含您的加载消息: 您可以在ajax调用中添加两行:
问题内容: 问题描述: 我正在创建一个滚动的带有缩略图的文章列表,该列表由我的SQLite数据库填充。通常,它运行缓慢,但速度较慢: 图像加载非常缓慢…我想使用“ 通用图像加载器 ”将图像缓存在设备上,如果您已经查看过图像(或者至少接近该图像,那会使它们看起来只是滚动到视图中) )。但是- 当您向上/向下拖动时,没有任何图像,然后在3-5秒后,图像开始弹出(就像重新下载它们一样) 我正在动态更改缩
我是NodeJS的新手,我正在使用express、ejs和Multer(处理多部分/表单数据)开发一个项目,以便上传一张图片(单个>>个人资料图片)。我一直试图在一个视图中显示上传的文件(图像),但没有成功。我有关于上传文件(req.file)的所有信息,但我不能用它做任何事情。 有人能帮帮我吗。 问候你,多娜
问题内容: 我有一个React应用,可以调用我的API,该API返回URL列表以用作imy图像src。 我用来显示图像加载时的加载微调组件。 我有一个变量来确定图像是否正在加载。 我无法弄清楚如何停止显示正在加载的微调器,并在它们全部加载后显示图像。 这是我的代码: Photos.jsx Photo.jsx 我尝试将我的最后一项用于,但是它永远不会被调用,因为由于仍然显示了微调框,所以它从未设置为
我想在GridView中显示图像列表。但我做不到。我想知道资产中图像列表的数据类型,以及构造函数在这种情况下的帮助。我刚刚开始学习颤振,我不知道如何使用它。
如何显示一个进度条,同时获取图像从URL在线圈。?