在listview中更新库适配器

时间:2013-07-09 07:21:05

标签: android listview gallery

当我尝试更新listview中的图库适配器(我使用回收)时,有时适配器不会更新,并且视图仍在使用旧适配器。其他所有内容都会更新。为什么?

public View getView(int position, View convertView, ViewGroup parent) {
    final int myPosition = position;
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (position == title.size() - 1) {
        rowView = inflater.inflate(R.layout.emptyview, parent, false);
        return rowView;
    }

    switch (typeOfCell.get(position)) {
    case 0:
        if (convertView == null) {
            rowView = inflater.inflate(R.layout.newstextcelladapter,
                    parent, false);
        } else {
            rowView = convertView;
        }
        break;
    case 1:
        if (convertView == null) {
            rowView = inflater.inflate(R.layout.newsimagecelladapter,
                    parent, false);
        } else {
            rowView = convertView;

        }

        Gallery gallery = (Gallery) rowView
                .findViewById(R.id.newsImageGallery);
        if (gallery == null) {
            Log.e("Gallery is null", "!!!!!!!!!!!!!!!!!!!!");
            rowView = inflater.inflate(R.layout.newsimagecelladapter,
                    parent, false);
        }
        gallery = (Gallery) rowView.findViewById(R.id.newsImageGallery);
        if (gallery == null) {
            Log.e("Gallery is still null", "!!!!!!!!!!!!!!!!!!!!");
        }


        try {
            gallery.setAdapter(this.adaptersForGallery.get(position));
            if (gallery.getAdapter().hashCode() == this.adaptersForGallery
                    .get(position).hashCode()) {
                Log.e("The gallery adapter is not set", "");
            }
            Log.w("URL used",
                    ""
                            + this.adaptersForGallery.get(position).mImageIds
                                    .get(0));
            gallery.setHorizontalFadingEdgeEnabled(false);
            gallery.setVisibility(View.GONE);
            gallery.setVisibility(View.VISIBLE);
        } catch (Exception e) {
            @SuppressWarnings("unused")
            int a = 1;
            Log.w("FATAL", "ERROR");
        }

        gallery.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                View view2 = new View(MainActivity.context);
                DetailsImageNews.setView(
                        MainActivity.dataBase
                                .getCommentsForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getAuthorForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getDateForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getTimeForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getDetailedTextForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getTitleForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.detailImageNews, adaptersForGallery
                                .get(myPosition), view2);
                MainActivity.detailsGallery.setSelection(myPosition);
                while (MainActivity.currentViewPosition != 1) {
                    MainActivity.mContainer.showNext();
                    Log.w("position", "" + MainActivity.currentViewPosition);
                    if (MainActivity.currentViewPosition > 2) {
                        MainActivity.currentViewPosition = 0;
                    }
                    MainActivity.currentViewPosition += 1;
                }
            }

        });
        gallery.refreshDrawableState();
        gallery.postInvalidate();
        gallery.invalidate();
        gallery.refreshDrawableState();
        gallery.setVisibility(View.INVISIBLE);
        gallery.setVisibility(View.VISIBLE);
        rowView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                View view2 = new View(MainActivity.context);
                DetailsImageNews.setView(
                        MainActivity.dataBase
                                .getCommentsForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getAuthorForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getDateForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getTimeForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getDetailedTextForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.dataBase
                                .getTitleForNews(MainActivity.existingForNews
                                        .get(myPosition)),
                        MainActivity.detailImageNews, adaptersForGallery
                                .get(myPosition), view2);
                MainActivity.detailsGallery.setSelection(myPosition);
                while (MainActivity.currentViewPosition != 1) {
                    MainActivity.mContainer.showNext();
                    Log.w("position", "" + MainActivity.currentViewPosition);
                    if (MainActivity.currentViewPosition > 2) {
                        MainActivity.currentViewPosition = 0;
                    }
                    MainActivity.currentViewPosition += 1;
                }
            }

        });
        break;
    case 2:
        if (convertView == null) {
            rowView = inflater.inflate(R.layout.newsvideocelladapter,
                    parent, false);
        } else {
            rowView = convertView;
        }

        Uri uri = Uri.parse(videoUrls.get(position));
        VideoView video = (VideoView) rowView.findViewById(R.id.newsVideo);
        video.setVideoURI(uri);
        break;
    default:
        if (convertView == null) {
            rowView = inflater.inflate(R.layout.newstextcelladapter,
                    parent, false);
        } else {
            rowView = convertView;
        }
        break;
    }
    TextView titleView = (TextView) rowView
            .findViewById(R.id.newsTitleView);
    TextView dateView = (TextView) rowView.findViewById(R.id.newsDateView);
    TextView timeView = (TextView) rowView.findViewById(R.id.newsTimeView);
    TextView commentsView = (TextView) rowView
            .findViewById(R.id.newsCommentView);
    titleView.setText(this.title.get(position));
    dateView.setText(this.date.get(position));
    timeView.setText(this.time.get(position));
    commentsView.setText(Integer.toString(this.comments.get(position)));
    return rowView;
}

这种情况每十次发生一次。我试图使用invalidate但是图像正在永远加载。 (我从网上下载图片。) 更新: 我从回收的视图中检查了画廊:画廊没有适配器。怎么办?

0 个答案:

没有答案