gpt4 book ai didi

android - 在 Android 的 GridView 中记录 2 列随机播放?

转载 作者:行者123 更新时间:2023-11-30 03:05:41 25 4
gpt4 key购买 nike

我正在使用自定义 GridView,其中有 2 列图像。当我将 Grid 向下滚动到下一条记录并返回到第一行记录时,我的记录从它的位置排成一行。

意味着,当 View 在 getview() 中重新生成时,GridView 记录从一列随机移动到另一列记录。

请给我建议。

private class ImageAdapter extends BaseAdapter {

private LinkedList<GalleryFeed> imagesLinkedList = new LinkedList<GalleryFeed>();
private Context mContext = null;
private LayoutInflater _layoutInflater = null;
private ImageLoader _feedLoader = null;
/**
*
* @param localContext
* @param mListItems
*/
public ImageAdapter(Context localContext,LinkedList<GalleryFeed> mListItems) {
mContext = localContext;
this.imagesLinkedList = mListItems;
_layoutInflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
_feedLoader = new ImageLoader(DefaultGalleryFrag.this.getActivity().getParent());
}

public int getCount() {
return imagesLinkedList != null ? imagesLinkedList.size() : 0;
}
public Object getItem(int position) {
return imagesLinkedList.get(position);
}
public long getItemId(int position) {
return 0;
}
public class ViewHolder{
public ImageView imageView=null;
public ImageView videoImageView=null;
}
public View getView(int position, View convertView, ViewGroup parent) {

View v = convertView;
ViewHolder viewHolder = null;
GalleryFeed bean = imagesLinkedList.get(position);

if(convertView == null){
viewHolder=new ViewHolder();
LayoutInflater linf = (LayoutInflater) mContext
.getSystemService(mContext.LAYOUT_INFLATER_SERVICE);
v = linf.inflate(R.layout.item_gallery_image, null);
viewHolder.imageView=(ImageView)v.findViewById(R.id.image);
viewHolder.videoImageView=(ImageView)v.findViewById(R.id.videoPalyIV);
/**
* SET THE RESOLUTION PIC ON IMAGE VIEW
*/
if(bean.getMediaType()!=null && bean.getMediaType().equalsIgnoreCase("Image")){
if(bean.getResolution280()!=null && bean.getResolution280().length()>0){
File imgFile = new File(bean.getResolution280());
if(imgFile.exists()&& imgFile.length()>0){
Bitmap myBitmap = Constant.getBitmap(imgFile.getAbsolutePath());
if(myBitmap!=null){
viewHolder.imageView.setTag(bean.getResolution280());
Drawable d = new BitmapDrawable(getResources(),myBitmap);
viewHolder.imageView.setImageDrawable(d);
}else{
_feedLoader.DisplayImage(bean.getResolution280(), R.drawable.loader, viewHolder.imageView);
}
}else{
_feedLoader.DisplayImage(bean.getResolution280(), R.drawable.loader, viewHolder.imageView);
}
}else{
_feedLoader.DisplayImage(bean.getResolution280(), R.drawable.loader, viewHolder.imageView);
}
viewHolder.videoImageView.setVisibility(View.GONE);
}else{
/**
* IF ITS A VIDEO FEED
*/
viewHolder.videoImageView.setVisibility(View.VISIBLE);
//_feedLoader.DisplayImage(bean.getVideoFrame(), R.drawable.loader, viewHolder.imageView);
viewHolder.imageView.setBackgroundResource(R.drawable.profile_pic);
}
/*if(mediaLeftForDownload.contains(String.valueOf(position))&& _mediaUrlList!=null &&_mediaUrlList.size()>0){
_imageLoader.DisplayImage(_mediaUrlList.get(position), R.drawable.loader, viewHolder.imageView);
}else{
viewHolder.imageView.setBackgroundDrawable(imagesLinkedList.get(position));
}*/
v.setTag(viewHolder);
}
else{
viewHolder = (ViewHolder) v.getTag();
}


DisplayMetrics dm = new DisplayMetrics();
DefaultGalleryFrag.this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels;
if(screenWidth<500){
viewHolder.imageView.setLayoutParams(/*new GridView.LayoutParams(300,300)*/ new LayoutParams(200,200));
}else{
viewHolder.imageView.setLayoutParams(new LayoutParams(300,300));
}
return v;
}
}

如图所示:

enter image description here enter image description here

最佳答案

Viewholder 模式在 getView 中以这种方式工作:

ViewHolder holder = null;
if (convertView == null) {
convertView = inflater.inflate(R.layout.myLayout, null);
holder = new ViewHolder();
// Populate the holder
holder.textView = (TextView) convertView.findViewById(R.id.myTextView);
holder.imageView = (ImageView) convertView.findViewById(R.id.myImageView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// Now, populate the views referenced by the viewHolder:
holder.textView.setText("Hello World");

整个想法是您不知道 convertView 是否将为空(即您将创建一个新 View )或者它是否将从先前存在的 View 中回收,从而节省膨胀时间。

在您的情况下,您仅在 convertView 为 null 时填充您的 View 。您需要将填充代码移到 if 子句之外。

关于android - 在 Android 的 GridView 中记录 2 列随机播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21857399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com