Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.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 旋转碎片中的endlessadapter最佳实践是什么?_Android_Android Fragments_Rotation_Commonsware Cwac - Fatal编程技术网

Android 旋转碎片中的endlessadapter最佳实践是什么?

Android 旋转碎片中的endlessadapter最佳实践是什么?,android,android-fragments,rotation,commonsware-cwac,Android,Android Fragments,Rotation,Commonsware Cwac,因此,我在一个片段上使用Commonware中的endlessadapter,我遇到的问题是,每当我在适配器等待完成加载某些数据时旋转,就会再次调用cacheInBackground方法。适配器的初始化是在片段中的onActivityCreated方法上调用的,那么我如何简单地恢复第一次调用cacheInBackground方法的结果呢 IpdmsEndlessAdapter endAdapt= new IpdmsEndlessAdapter(getActivity(),adapter,R.la

因此,我在一个片段上使用Commonware中的endlessadapter,我遇到的问题是,每当我在适配器等待完成加载某些数据时旋转,就会再次调用cacheInBackground方法。适配器的初始化是在片段中的onActivityCreated方法上调用的,那么我如何简单地恢复第一次调用cacheInBackground方法的结果呢

IpdmsEndlessAdapter endAdapt= new IpdmsEndlessAdapter(getActivity(),adapter,R.layout.list_loading_row){


        @Override
        protected boolean cacheInBackground() throws RequestException{
            tempList.clear();
            List<MyProcessDTO> myPRocs;

            myPRocs = new MyprocessesManager(getActivity()).getMyProcessesFromServer(processListPage);

            if(myPRocs!=null){
                tempList.addAll(myPRocs);
            }else
                return false;
            //return true if there's more data do return
            //return false if there was an error or there's no more data
            return myPRocs.size()>=10;


        }

        @Override
        protected boolean onException(View pendingView, Exception e) {

            Toast.makeText(getActivity(), e.getMessage(), Toast.LENGTH_SHORT).show();

            return false;
        }

        @Override
        protected void appendCachedData() {

            @SuppressWarnings("unchecked")
            GenericMenuAdapter a=(GenericMenuAdapter)getWrappedAdapter();

            for(MyProcessDTO myProcessDTO:tempList){
                a.add(new IpdmsMobileMenuItemListDTO(myProcessDTO.getNrprocesso(), myProcessDTO.getEtapa(), 0, myProcessDTO));
            }
            processListPage++;

        }

    };
    actualListView.setAdapter(endAdapt);
IpdmsEndlessAdapter endAdapt=新的IpdmsEndlessAdapter(getActivity(),适配器,R.layout.list_loading_行){
@凌驾
受保护的布尔cacheInBackground()引发RequestException{
圣殿骑士;
列出myproc;
myPRocs=新建MyProcessManager(getActivity()).GetMyProcessFromServer(processListPage);
如果(myPRocs!=null){
圣堂武士。addAll(myPRocs);
}否则
返回false;
//如果有更多数据需要返回,则返回true
//如果出现错误或没有更多数据,则返回false
返回myPRocs.size()>=10;
}
@凌驾
受保护的布尔onException(视图挂起视图,异常e){
Toast.makeText(getActivity(),e.getMessage(),Toast.LENGTH_SHORT).show();
返回false;
}
@凌驾
受保护的无效appendCachedData(){
@抑制警告(“未选中”)
GenericMenuAdapter a=(GenericMenuAdapter)getWrappedAdapter();
for(MyProcessDTO MyProcessDTO:templast){
a、 添加(新的IPDMSMobilementUItemListDTO(myProcessDTO.getnProcessO(),myProcessDTO.getEtapa(),0,myProcessDTO));
}
processListPage++;
}
};
actualListView.setAdapter(endAdapt);

关于,

将其设置为动态片段(即,通过
片段事务设置它),并在设置过程中的某个地方调用
setRetainInstance(true)
(例如,
onActivityCreated()
)。这将在配置更改之间保持适配器实例


在后台线程执行其工作时,配置更改可能仍然存在一些问题。如果您在应用上述建议后仍遇到问题,请对此答案发表评论。

您好!做记号我现在用一个viewpager调用这个片段,我只是按照你说的做了,我把片段的onActivityCreated方法的setRetainInstance设置为true,似乎如果我在片段仍在加载时旋转,就会调用一个新任务(来自cacheInBackground方法)。有没有办法防止这种情况发生?使用setRetainInstance处理片段上的线程/异步任务是否是一种良好的做法,或者在旋转时维护片段是否有缺点?@Maxrunner:我必须运行一些实验来确定最佳策略。这可能需要几天时间。我已经打开了一个GitHub问题来跟踪它:@Maxrunner:也就是说,
AsyncTask
和保留的片段配合得很好。忘了问一下,如果我将setRetainInstance设置为true,哪些片段生命周期方法被忽略了??我知道onCreate不会被调用,但是onCreateView和onSaveInstanceState呢?它们被调用了吗?@Maxrunner:
onCreateView()
仍然被调用。我不知道是否调用了
onSaveInstanceState()
——您必须检查文档或运行测试。