Android的 - 在GridView中不同的项目没有显示出来不同、项目、Android、GridView

2023-09-05 02:43:55 作者:似水年华

我工作的应用程序,它具有图像的GridView控件,但在GridView的最后一个项目是一个按钮,加载更多的项目进入电网。但我面临的一个奇怪的问题,那就是巴顿显示了某个时候,有时又是不特别是当我向上和向下滚动非常快的GridView控件。我认为这是因为回收的问题,但我不知道如何解决它。

I am working on app which has a GridView of images but the last item in GridView is a button that loads more item into Grid. But i am facing a strange issue and that is Button shows up sometime and sometime it doesn't specially when i scroll up and down really fast on GridView. I think it's because of recycle issue but i don't know how to fix it.

下面是我的code: -

Here is my code:-

public class ButtonGridAdapter extends BaseAdapter implements OnCheckedChangeListener, OnClickListener {


    private ArrayList<String> thumbUrls;
    private ArrayList<String> mainUrls;
    private LayoutInflater layoutInflater;
    private Context context;
    private Intent intent;
    private ArrayList<String> positions = new ArrayList<String>();
    private static ArrayList<String> urlsToUpload = new ArrayList<String>(); 
    private int width;

    public ButtonGridAdapter(Context context, ArrayList<String> thumbUrls, ArrayList<String> mainUrls, String clicked)
    {
        this.context = context;
        this.thumbUrls = thumbUrls;
        this.mainUrls = mainUrls;
        intent = new Intent(context, GalleryView.class);
        this.layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        DisplayMetrics displaymetrics = new DisplayMetrics();
        ((Activity) context).getWindow().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
        this.width = displaymetrics.widthPixels;
        System.out.println(width+" width");
    }

    @Override
    public int getCount() {
        return thumbUrls.size()+1;
    }

    @Override
    public Object getItem(int arg0) {
        return thumbUrls.get(arg0);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public static class ViewHolder
    {
        ImageView mainImage;
        CheckBox checkBox;
        Button button;
    }

    public static class ButtonHolder
    {

    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder;
        if(row==null || row.getTag().equals("button"))
        {
                row = layoutInflater.inflate(R.layout.griditem, parent, false);
                holder = new ViewHolder();
                holder.mainImage = (ImageView)row.findViewById(R.id.itemgrid);
                holder.checkBox = (CheckBox)row.findViewById(R.id.itemselected);
                holder.button = null;
                row.setTag(holder);
        }
        else 
        {
            holder = (ViewHolder)row.getTag();
        }

        if(position==thumbUrls.size())
        {
            int width = row.getWidth();
            int height = row.getHeight()-70;
            row = layoutInflater.inflate(R.layout.mybutton, parent, false);
            holder.button = (Button)row.findViewById(R.id.gridbutton);
            holder.button.setText("Load More");
            LayoutParams params = holder.button.getLayoutParams();
            params.height = height;
            params.width = width;
            holder.button.requestLayout();
            holder.button.setOnClickListener(this);
            System.out.println("Called");
            row.setTag("button");
            return row;
        }
        else
        {
            setImageSize(holder.mainImage);
            System.out.println(position);
            holder.mainImage.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View v) {
                    intent.putExtra("position", position);
                    intent.putStringArrayListExtra("MainUrls", mainUrls);
                    intent.putStringArrayListExtra("Thumbnails", thumbUrls);
                    context.startActivity(intent);
                }
            });

            holder.checkBox.setOnCheckedChangeListener(null);
            holder.checkBox.setTag(position);

            holder.checkBox.setChecked(positions.contains(thumbUrls.get(position)));
            holder.checkBox.setOnCheckedChangeListener(this);

            UrlImageViewHelper.setUrlDrawable(holder.mainImage, thumbUrls.get(position), R.drawable.extras_load);
            return row;
        }


    }

    private void setImageSize(ImageView imageView) {
        LayoutParams params = imageView.getLayoutParams();
        int leftWidth = width - 80;
        params.width = leftWidth/3;
        params.height = leftWidth/3;
        imageView.requestLayout();
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if(isChecked)
        {
            positions.add(thumbUrls.get((Integer)buttonView.getTag()));
            urlsToUpload.add(mainUrls.get((Integer)buttonView.getTag()));
        }

        else
        {
            positions.remove(thumbUrls.get((Integer)buttonView.getTag()));
            urlsToUpload.remove(mainUrls.get((Integer)buttonView.getTag()));
        }
    }

    public static ArrayList<String> getUrlsToUpload()
    {
        return urlsToUpload;
    }

    @Override
    public void onClick(View v) {
        if(v.getId()==R.id.gridbutton)
        {
            InstagramImpl.getInstance().fetchMorePhotos();
        }

    }
}

任何帮助将是真的真的AP preciate。

Any help would be really really appreciate.

感谢。

推荐答案

我张贴满 getView 从我的其他的回答方式。简单,你先检查一下位置。如果它是最后一个项目(负载更多按钮)回路布局立刻。

I post full getView method from my other answer. Simple you check the position first. If it's the last item (load more button) return layout immediately.

private final Media special = new Media("-1", "", "", "", ""); 


    public MediaGridAdapter(Context context, int imageID, ArrayList<Media> array, int type, boolean isGetMore) {

        list = array;
        mediaType = type;
        this.context = context;

            if(list != null) {
                list.add(special);
            }


    }       



     @Override
            public View getView(int position, View convertView, ViewGroup parent) {

                RelativeLayout item;
                ViewHolder  holder;
//this part check it's the last item. -1 is my special item id in contructor.
                if(list.get(position).getId().equals("-1")) {

                        item = (RelativeLayout) LayoutInflater.from(context).inflate(R.layout.item_special_more, null);
                        item.setTag(MORE_BUTTON);
                    return item;
                }
//

                if(convertView == null || convertView.getTag().toString().equals(MORE_BUTTON)) {

                    Context context = parent.getContext();
                    item = (RelativeLayout) LayoutInflater.from(context).inflate(R.layout.item_with_icon_vertical, null);
                    holder = new ViewHolder();
                    holder.thumbnail = (ImageView) item.findViewById(R.id.iv_icon_media);

                    item.setTag(holder);

                } else {

                    item = (RelativeLayout) convertView;
                    holder = (ViewHolder) item.getTag();
                }
            }
// set data.
    holder.thumbnail.setBitmap(...) 

    return item;
 
精彩推荐
图片推荐