当前位置: 首页 > 知识库问答 >
问题:

Android中GridView中的记录在2列中无序排列?

干稳
2023-03-14

我正在使用Custom GridView,其中我有2列图像。当我将网格向下滚动到下一条记录并返回到第一行记录时,我的记录从它的位置移到一行。

意味着,当视图在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;
        }
    }

如图所示:

共有2个答案

陆俊迈
2023-03-14
/**
     * Adapter for our image files.
     */
    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);

                v.setTag(viewHolder);
            }
            else{
                viewHolder = (ViewHolder) v.getTag();
            }
            /**
             * 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);
                            viewHolder.imageView.setTag(bean.getMediaId());//===set tag
                        }else{
                            _feedLoader.DisplayImage(bean.getResolution_280_280URL(), R.drawable.loader, viewHolder.imageView);
                            viewHolder.imageView.setTag(bean.getMediaId());//===set tag
                        }
                    }else{
                        _feedLoader.DisplayImage(bean.getResolution_280_280URL(), R.drawable.loader, viewHolder.imageView);
                        viewHolder.imageView.setTag(bean.getMediaId());//===set tag
                    }
                }else{
                    _feedLoader.DisplayImage(bean.getResolution_280_280URL(), R.drawable.loader, viewHolder.imageView);
                    viewHolder.imageView.setTag(bean.getMediaId());//===set tag
                }
                viewHolder.videoImageView.setVisibility(View.GONE);
            }else{
                /**
                 * IF ITS A VIDEO FEED
                 */
                viewHolder.videoImageView.setVisibility(View.VISIBLE);
                viewHolder.imageView.setTag(bean.getMediaId());//===set tag
                //_feedLoader.DisplayImage(bean.getVideoFrame(), R.drawable.loader, viewHolder.imageView);
                Bitmap icon = BitmapFactory.decodeResource(DefaultGalleryFrag.this.getActivity().getParent().getResources(),
                        R.drawable.profile_pic);
                viewHolder.imageView.setImageBitmap(icon);
            }

            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;
        }
    }
陆飞鸿
2023-03-14

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是否将为null(即您将创建一个新视图),或者它是否将从以前的现有视图中回收,从而节省充气时间。

在您的情况下,您仅在转换视图为空时填充视图。您需要将填充代码移到if子句之外。

 类似资料:
  • 以下是我的一些疑问: 我有两个不同的流,元素按顺序排列。 1)现在,当我在这些流中的每一个上执行时,会维护顺序吗?(因为这里的每个组都将仅发送给一个任务管理器)我的理解是,记录将是一个组的顺序,在这里纠正我。 2) 在这两个流上执行按键操作后,我正在进行联合分组,以获取匹配和非匹配记录。这里也会维持秩序吗?,因为这也适用于KeyedStream。我正在使用事件时间(EventTime)和上升时间(

  • 我有一个记录按顺序到达的流。我应用了一个map函数,然后在上面应用了keyBy函数。在每个具有相同键的记录流中,记录的顺序是否会保持? 在按顺序排列记录方面也存在类似的问题。但是我对这里给出的答案和下面从链接“https://ci.apache.org/projects/flink/flink-docs-release-1.2/concepts/programming-model.html”中复制

  • 我有下面的dataframe示例。 给定一个模板,我想根据列的新顺序更改行的顺序,因此它看起来像: 我找到了下面的线程,但是洗牌是随机的。Cmmiw。 洗牌数据帧行

  • 问题内容: 我有两个与ElasticSearch有关的问题。 1)有什么方法可以指定我想要特定字段的结果以降序排列吗?等效SQL查询为: 2)如何获得第一和最后(最新)记录? 问题答案: 1)Elasticsearch具有相当完善的Sorting API ,可让您控制排序顺序。因此,在elasticsearch中,等效于您的MySql查询如下所示: 排序也可以在_search URI上指定。 2)

  • 本文向大家介绍从列表中排除一些ID记录,并在MySQL中显示其余记录,包括了从列表中排除一些ID记录,并在MySQL中显示其余记录的使用技巧和注意事项,需要的朋友参考一下 要排除记录,请使用MySQL NOT 。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是排除记录的查询- 这将产生以下输出-

  • (0,0)(0,1) (1,0)(1,1) 像这种格式一样,我需要显示,也需要根据数据大小水平和垂直滚动