0

我正在尝试使用图库小部件创建日历。我有一个月视图类,用于处理为特定月份创建视图。我的 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() ?

4

2 回答 2

1

使用的画廊来自是否存在具有视图回收的画廊小部件的替代品?

删除了一行onScroll()

postDelayed(mDisableSuppressSelectionChangedRunnable, SCROLL_TO_FLING_UNCERTAINTY_TIMEOUT);
于 2012-01-20T03:47:26.263 回答
0

是否保证在调用 addView() 时调用 notifyDatasetChanged()

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

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

于 2012-01-17T05:18:14.693 回答