Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
Java 我们何时在PagerAdapter上通知更改的数据_Java_Android_Performance_View_Android Viewpager - Fatal编程技术网

Java 我们何时在PagerAdapter上通知更改的数据

Java 我们何时在PagerAdapter上通知更改的数据,java,android,performance,view,android-viewpager,Java,Android,Performance,View,Android Viewpager,我已经看到了关于这个主题的几个问题,我尝试添加了建议的onNotifyDataChanged,但似乎没有任何效果。我将感谢任何帮助,下面是我的类和内部类MyViewPagerAdapter,我如何停止修复此问题 java.lang.IllegalStateException:应用程序的PagerAdapter 在未调用的情况下更改了适配器的内容 PagerAdapter#通知数据已更改!预期的适配器项计数:0 代码: 公共类SlideShowFragment扩展了DialogFragment{

我已经看到了关于这个主题的几个问题,我尝试添加了建议的onNotifyDataChanged,但似乎没有任何效果。我将感谢任何帮助,下面是我的类和内部类MyViewPagerAdapter,我如何停止修复此问题

java.lang.IllegalStateException:应用程序的PagerAdapter 在未调用的情况下更改了适配器的内容 PagerAdapter#通知数据已更改!预期的适配器项计数:0

代码:

公共类SlideShowFragment扩展了DialogFragment{
private final String TAG=SlideShowFragment.class.getSimpleName();
私有数组列表图像;
私人律师事务所;
/**
*一个简单的新实例
*
*@return slideShowFragment
*/
公共静态SlideShowFragment newInstance(){
SlideShowFragment SlideShowFragment=新的SlideShowFragment();
返回幻灯片片段;
}
@凌驾
创建视图时的公共视图(@NonNull layoutiner flater flatter,ViewGroup container,
Bundle savedInstanceState){
视图v=充气机。充气(R.layout.fragment\u slideshow\u dialog\u fragment,container,false);
ViewPager ViewPager=v.findViewById(R.id.ViewPager);
断言getArguments()!=null;
图像=(ArrayList)getArguments().getSerializable(“图像”);
int selectedPosition=getArguments().getInt(“位置”);
pd=v.findViewById(R.id.img_进度);
Log.e(标签“位置:”+selectedPosition);
Log.e(标记“images size:+images.size());
MyViewPagerAdapter MyViewPagerAdapter=新建MyViewPagerAdapter();
//增加此项以防撞车#修复2018年5月25日
myViewPagerAdapter.notifyDataSetChanged();
设置适配器(myViewPagerAdapter);
返回v;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE\u NORMAL、android.R.STYLE.Theme\u Black\u NoTitleBar\u全屏);
}
/**
*myViewPager适配器内部类
*我正在使用Glide库来帮助我显示
*我的服务器上json数据的图像。
*/
类MyViewPagerAdapter扩展了PagerAdapter{
私人停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场停车场;
MyViewPagerAdapter(){
}
@TargetApi(Build.VERSION\u code.KITKAT)
@非空
@凌驾
公共对象实例化项(@NonNull视图组容器,int位置){
layoutInflater=(layoutInflater)Objects.requirennoull(getActivity()).getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
assert layoutInflater!=null;
视图=布局更平坦。充气(R.layout.image\u全屏预览,容器,假);
试一试{
ImageView imageViewPreview=view.findViewById(R.id.image\u预览);
Image=images.get(位置);
Glide.with(getActivity()).load(image.getLarge())
.缩略图(0.5f)
.crossFade()
.diskCacheStrategy(diskCacheStrategy.ALL)
.错误(R.可绘制.重新加载)
.listener(新的RequestListener(){
@凌驾
公共布尔onException(异常e、字符串模型、目标、布尔isFirstResource){
pd.setVisibility(视图可见);
返回false;
}
@凌驾
公共布尔onResourceReady(可提取资源、字符串模型、目标、,
布尔值(从MemoryCache开始,布尔值为FirstResource){
pd.setVisibility(视图不可见);
返回false;
}
})
.进入(imageViewPreview);
//pd.setVisibility(视图不可见);
container.addView(视图);
}捕获(执行错误e){
Toast.makeText(getContext(),“请检查连接”,Toast.LENGTH_SHORT.show();
}
返回视图;
}
@凌驾
public int getCount(){
返回图像。size();
}
@凌驾
公共布尔值isViewFromObject(@NonNull视图,@NonNull对象obj){
返回视图==obj;
}
@凌驾
public void destructionItem(@NonNull视图组容器,int位置,@NonNull对象){
container.removeView((视图)对象);
}
}
}

在我看来,如果您正在使用一个适配器,并在该适配器中分配了一个空数据集或一些基本数据集,然后又想在相同的数据集中添加更多数据,并想更新布局而不将其加载回初始配置,那么您可以使用“notifyDataChanges”此方法将自动加载已添加到adpater中的额外数据或用户刚刚更新的数据

例如:

private RecyclerView recyclerView;
List<Home_Data> ModelHomeData = new ArrayList<>();  //taking a empty object of list to show
recyclerView = (RecyclerView) view.findViewById(R.id.layout_modelBikeLinear);
recyclerView.setAdapter(new ModelAdapter(ModelDataForView, R.layout.template_models , getContext()));
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
私有回收视图回收视图;
List ModelHomeData=new ArrayList()//获取列表中的空对象以显示
recyclerView=(recyclerView)view.findViewById(R.id.layout\u modelBikeLinear);
setAdapter(新的ModelAdapter(ModelDataForView,R.layout.template_models,getContext());
setLayoutManager(新的LinearLayoutManager(getContext());
在这种情况下,我们为视图分配了一个空适配器,但我想添加更多数据,然后在不反复加载的情况下更改视图,因此现在我可以在列表中添加数据,然后使用“notifyDataChanged”

for(int i=0;iprivate RecyclerView recyclerView;
List<Home_Data> ModelHomeData = new ArrayList<>();  //taking a empty object of list to show
recyclerView = (RecyclerView) view.findViewById(R.id.layout_modelBikeLinear);
recyclerView.setAdapter(new ModelAdapter(ModelDataForView, R.layout.template_models , getContext()));
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
for(int i = 0; i < response.length(); i++){
                //SliderUtils sliderUtils = new SliderUtils();
                Model_Data DataModelFile = new Model_Data();
                try {
                    JSONObject jsonObject = response.getJSONObject(i);
                    DataModelFile.setModelId(jsonObject.getString("id"));
                    DataModelFile.setModelName(jsonObject.getString("name"));
                    DataModelFile.setModelPrice(jsonObject.getString("price"));
                    DataModelFile.setBikeImageUrl(jsonObject.getString("image"));
                    if ((Integer.parseInt(jsonObject.getString("available")) > 0) && (Integer.parseInt(jsonObject.getString("show")) > 0)) {
                        DataModelFile.setBikeAvailable(true);
                    }
                    else
                    {
                        DataModelFile.setBikeAvailable(false);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                ModelDataForView.add(DataModelFile);
            }
adapter.notifyDataSetChanged();