动态地将视图数据添加到android gallery适配器

时间:2012-01-17 05:04:12

标签: android android-gallery galleryview

我正在尝试使用Gallery小部件创建日历。我有一个monthview类来处理创建特定月份的视图。我的MonthGallery类使用monthview作为其子视图,而我的monthviewadapter创建monthgallery的月视图。我遇到的问题是在用户滚动或翻转到上个月或下个月时尝试使用上个月和下个月更新适配器。我使用库中的onItemSelectedListener中给出的位置,根据此位置向适配器的正面和背面添加月份。例如:

OnItemSelectedListener mGalleryOnItemSelectedListener = new OnItemSelectedListener() {

    @Override
    public void onItemSelected(AdapterView<?> adapterview, View view, int position, long id) {

        MonthView mv = (MonthView) view;
        int month = mv.getMonth();
        int year = mv.getYear();
        updateMonthBar(month, year);


        if ((position + 1) == mMonthViewGallery.getCount()) {
            if (Calendar.DECEMBER == month) {
                mMonthViewAdapter.addView(Calendar.JANUARY, year + 1);
            } else {
                mMonthViewAdapter.addView(month + 1, year);
            }
            mMonthViewGallery.setSelection(position);
        }

        if (0 == position) {

            if (Calendar.JANUARY == month) {
                mMonthViewAdapter.addViewToFront(Calendar.DECEMBER, year - 1);
            } else {
                mMonthViewAdapter.addViewToFront(month - 1, year);
            }
            mMonthViewGallery.setSelection(1);
        }
    }

问题
一旦用户滚动到另一个月,然后尝试滚动到第一个月,图库就不会自动捕捉到下一个选择。在适配器中,当调用addView(int month,int year)时,它将调用notifyDataSetChanged(),以便它在上一个月或下个月更新库,但这似乎会导致在缓慢滚动时意外“捕捉”。只是不确定如何构建它以便滚动顺畅。

修改
我现在正在使用Gallery.setCallbackDuringFling(false)但有没有办法在滚动图库时禁用onitemselected回调,然后在滚动时调用onitemselected()?

2 个答案:

答案 0 :(得分:1)

使用Does a replacement for Gallery widget with View recycling exist?

中的图库

onScroll()

中删除了一行
postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);

答案 1 :(得分:0)

当addView()调用

时,是否保证调用notifyDatasetChanged()

我想,你可以查一下......

当我触摸适配器内的视图时,我曾经立即调用notifyDatasetChanged()。