Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 调用setAdapter()后,GridView加载缓慢_Android_Gridview - Fatal编程技术网

Android 调用setAdapter()后,GridView加载缓慢

Android 调用setAdapter()后,GridView加载缓慢,android,gridview,Android,Gridview,我把GridViews放在我的3页ViewPager上。这个想法是建立一个日历的月视图,可以无限滚动到用户想要的地方 我的工作主要基于“无限视图分页”。但不是实现我自己的视图对象;我正在使用GridViews 下面是我对onPageScrollStateChanged方法的实现: @Override public void onPageScrollStateChanged(int state) { if (state == ViewPager.SCROLL_STATE_IDLE) {

我把
GridView
s放在我的3页
ViewPager
上。这个想法是建立一个日历的月视图,可以无限滚动到用户想要的地方

我的工作主要基于“无限视图分页”。但不是实现我自己的
视图
对象;我正在使用
GridView
s

下面是我对
onPageScrollStateChanged
方法的实现:

@Override
public void onPageScrollStateChanged(int state) {

    if (state == ViewPager.SCROLL_STATE_IDLE) {     

        FragmentPagerAdapter adapter = (FragmentPagerAdapter) mMonthPager
                    .getAdapter();

            // Called to obtain reference for the Fragments inside the ViewPager.
        CalendarGridMonthlyFragment oldMinMonthFragment = (CalendarGridMonthlyFragment) adapter
                    .instantiateItem(mMonthPager, 0);
        CalendarGridMonthlyFragment oldMidMonthFragment = (CalendarGridMonthlyFragment) adapter
                    .instantiateItem(mMonthPager, 1);
        CalendarGridMonthlyFragment oldMaxMonthFragment = (CalendarGridMonthlyFragment) adapter
                    .instantiateItem(mMonthPager, 2);

            // Get the selected month for each Fragment.
        final Calendar oldMinMonth = oldMinMonthFragment.getSelectedMonth();
        final Calendar oldMidMonth = oldMidMonthFragment.getSelectedMonth();
        final Calendar oldMaxMonth = oldMaxMonthFragment.getSelectedMonth();

        if (mFocusedPage == 0) {

            final Calendar newMonth = (Calendar) oldMinMonth.clone();
            newMonth.add(Calendar.MONTH, -1);

            oldMinMonthFragment.setSelectedMonth(newMonth);
            oldMidMonthFragment.setSelectedMonth(oldMinMonth);
            oldMaxMonthFragment.setSelectedMonth(oldMidMonth);

        } else if (mFocusedPage == 2) {

            final Calendar newMonth = (Calendar) oldMaxMonth.clone();
            newMonth.add(Calendar.MONTH, 1);

            oldMinMonthFragment.setSelectedMonth(oldMidMonth);
            oldMidMonthFragment.setSelectedMonth(oldMaxMonth);
            oldMaxMonthFragment.setSelectedMonth(newMonth);
            }  

        mMonthPager.setCurrentItem(1, false);
    }
}
public void setSelectedMonth(Calendar value) {

    mMonth = value.get(Calendar.MONTH);
    mYear = value.get(Calendar.YEAR);

    CalendarGridMonthlyAdapter newAdapter = new CalendarGridMonthlyAdapter(
            mContext, GRID_CHIP, mGridWidth, mGridHeight,
            mMonth, mYear);

    mGridView.setAdapter(newAdapter);
}
下面是我的
设置选择月
方法:

@Override
public void onPageScrollStateChanged(int state) {

    if (state == ViewPager.SCROLL_STATE_IDLE) {     

        FragmentPagerAdapter adapter = (FragmentPagerAdapter) mMonthPager
                    .getAdapter();

            // Called to obtain reference for the Fragments inside the ViewPager.
        CalendarGridMonthlyFragment oldMinMonthFragment = (CalendarGridMonthlyFragment) adapter
                    .instantiateItem(mMonthPager, 0);
        CalendarGridMonthlyFragment oldMidMonthFragment = (CalendarGridMonthlyFragment) adapter
                    .instantiateItem(mMonthPager, 1);
        CalendarGridMonthlyFragment oldMaxMonthFragment = (CalendarGridMonthlyFragment) adapter
                    .instantiateItem(mMonthPager, 2);

            // Get the selected month for each Fragment.
        final Calendar oldMinMonth = oldMinMonthFragment.getSelectedMonth();
        final Calendar oldMidMonth = oldMidMonthFragment.getSelectedMonth();
        final Calendar oldMaxMonth = oldMaxMonthFragment.getSelectedMonth();

        if (mFocusedPage == 0) {

            final Calendar newMonth = (Calendar) oldMinMonth.clone();
            newMonth.add(Calendar.MONTH, -1);

            oldMinMonthFragment.setSelectedMonth(newMonth);
            oldMidMonthFragment.setSelectedMonth(oldMinMonth);
            oldMaxMonthFragment.setSelectedMonth(oldMidMonth);

        } else if (mFocusedPage == 2) {

            final Calendar newMonth = (Calendar) oldMaxMonth.clone();
            newMonth.add(Calendar.MONTH, 1);

            oldMinMonthFragment.setSelectedMonth(oldMidMonth);
            oldMidMonthFragment.setSelectedMonth(oldMaxMonth);
            oldMaxMonthFragment.setSelectedMonth(newMonth);
            }  

        mMonthPager.setCurrentItem(1, false);
    }
}
public void setSelectedMonth(Calendar value) {

    mMonth = value.get(Calendar.MONTH);
    mYear = value.get(Calendar.YEAR);

    CalendarGridMonthlyAdapter newAdapter = new CalendarGridMonthlyAdapter(
            mContext, GRID_CHIP, mGridWidth, mGridHeight,
            mMonth, mYear);

    mGridView.setAdapter(newAdapter);
}
无限刷卡有效。但在卷轴结束后,会有一个明显的闪烁——几乎半秒

调试表明,
setAdapter
方法是所有这些麻烦的罪魁祸首。那么,有没有办法加快设置新适配器的过程

…或者是另一种方法


提前谢谢

不能使用相同的适配器实例,但更改月份和年份值吗?我尝试过了。但它没有改变任何观点。甚至在调用了
notifyDataSetChanged
方法之后,我认为您应该在这里使用单例片段模式:我也有同样的问题。即使GridView包含3个项目,当调用setAdapter时,GridView的动画速度也很慢。我想知道这是否是可以禁用的预期动画。