有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题

Android TabLayout+ViewPager黄金组合实战指南 TabLayout和ViewPager是Android原生分页导航的核心组件,基于PagerAdapter实现Fragment页面容器与顶部标签栏的双向协同。其原理在于TabLayout负责UI渲染与用户交互,ViewPager承担页面调度与生命周期管理,二者通过setupWithViewPager建立松耦合绑定。该方案具备零第三方依赖、全版本兼容、调试友好等技术价值,广泛应用于电商详情页、教育App模块切换、政务平台多栏目等场景。相比ViewPager2需自行实现Tab逻辑,或BottomNavigati 阅读详情
ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->properties->Java Build Path->Libraries->Add External Jars中加入sdk目录下的extras/android/support/v4/android-support-v4.jar(如果找不到,则需要用sdk manager下载android support package)。加入这个jar包之后就可以使用ViewPager类了。
ViewPager的使用类似于ListView,需要有对应的Adapter进行数据绑定,实现图片切换仅需要继承PaperAdapter就可以了。继承后需要重写如下四个方法。
    instantiateItem(ViewGroup, int)
    destroyItem(ViewGroup, int, Object)
    getCount()
    isViewFromObject(View, Object)

类似于BaseAdapter,其中instantiateItem方法用来得到每个View,destroyItem用以控制当某个View不需要的时候的回收处理。isViewFromObject用来实现判断View和Object是否为同一个View。

先看一下效果图:

第一步:首先是在布局文件里添加viewPager布局。代码如下:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     tools:context=".MainActivity" >  
  6.   
  7.     <android.support.v4.view.ViewPager  
  8.         android:id="@+id/viewpager"  
  9.         android:layout_width="fill_parent"  
  10.         android:layout_height="fill_parent"  
  11.         android:layout_gravity="center" >  
  12.     </android.support.v4.view.ViewPager>  
  13.   
  14.     <Button  
  15.         android:id="@+id/deleteBtn"  
  16.         android:layout_width="wrap_content"  
  17.         android:layout_height="wrap_content"  
  18.         android:layout_alignParentBottom="true"  
  19.         android:layout_centerHorizontal="true"  
  20.         android:layout_marginBottom="20dp"  
  21.         android:text="删除" />  
  22.   
  23. </RelativeLayout>  
第二步:创建item布局用于填充在ViewPager里,可以自定义也可以加载写好的xml布局文件。代码如下:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:gravity="center"  
  6.     android:orientation="vertical" >  
  7.   
  8.     <LinearLayout  
  9.         android:layout_width="wrap_content"  
  10.         android:layout_height="wrap_content"  
  11.         android:layout_marginBottom="10dp"  
  12.         android:layout_marginTop="10dp"  
  13.         android:background="@drawable/item_bg"  
  14.         android:orientation="vertical"  
  15.         android:padding="10dp" >  
  16.   
  17.         <TextView  
  18.             android:id="@+id/view_title"  
  19.             android:layout_width="wrap_content"  
  20.             android:layout_height="wrap_content"  
  21.             android:layout_gravity="center_horizontal"  
  22.             android:layout_marginTop="15dp"  
  23.             android:singleLine="true"  
  24.             android:textSize="20sp" />  
  25.   
  26.         <ImageView  
  27.             android:id="@+id/view_image"  
  28.             android:layout_width="240dp"  
  29.             android:layout_height="220dp"  
  30.             android:layout_gravity="center_horizontal"  
  31.             android:layout_marginLeft="8dp"  
  32.             android:layout_marginTop="2dp" />  
  33.   
  34.         <TextView  
  35.             android:id="@+id/view_content"  
  36.             android:layout_width="wrap_content"  
  37.             android:layout_height="wrap_content"  
  38.             android:layout_gravity="center_horizontal"  
  39.             android:layout_marginBottom="20dp"  
  40.             android:layout_marginTop="2dp"  
  41.             android:ellipsize="end"  
  42.             android:maxLines="2"  
  43.             android:text="很不错哦!嘻嘻,嘿嘿,O(∩_∩)O哈哈哈~……"  
  44.             android:textSize="15sp" />  
  45.     </LinearLayout>  
  46.   
  47. </LinearLayout>  
第三步:然后就是Activity了,主要写了左右滑动切换页面。代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package net.loonggg.viewpager;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.app.Activity;  
  7. import android.os.Bundle;  
  8. import android.support.v4.view.ViewPager;  
  9. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  10. import android.view.LayoutInflater;  
  11. import android.view.View;  
  12. import android.view.Window;  
  13. import android.widget.Button;  
  14. import android.widget.ImageView;  
  15. import android.widget.TextView;  
  16. import android.widget.Toast;  
  17.   
  18. public class MainActivity extends Activity {  
  19.     private ViewPager viewPager;  
  20.     private Button deleteBtn;  
  21.     private List<View> listViews = null;  
  22.     private int[] imgs = { R.drawable.img0, R.drawable.img1, R.drawable.img2,  
  23.             R.drawable.img3, R.drawable.img4, R.drawable.img5, };  
  24.     private int index = 0;  
  25.     private ViewPagerAdapter adapter;  
  26.   
  27.     @Override  
  28.     protected void onCreate(Bundle savedInstanceState) {  
  29.         super.onCreate(savedInstanceState);  
  30.         requestWindowFeature(Window.FEATURE_NO_TITLE);  
  31.         setContentView(R.layout.activity_main);  
  32.         viewPager = (ViewPager) findViewById(R.id.viewpager);  
  33.         deleteBtn = (Button) findViewById(R.id.deleteBtn);  
  34.   
  35.         listViews = new ArrayList<View>();  
  36.         for (int i = 0; i < imgs.length; i++) {  
  37.             View view = LayoutInflater.from(getApplicationContext()).inflate(  
  38.                     R.layout.viewpager_item, null);  
  39.             TextView title = (TextView) view.findViewById(R.id.view_title);  
  40.             title.setText("头像");  
  41.             ImageView iv = (ImageView) view.findViewById(R.id.view_image);  
  42.             iv.setBackgroundResource(imgs[i]);  
  43.             listViews.add(view);  
  44.         }  
  45.   
  46.         adapter = new ViewPagerAdapter(listViews);  
  47.         viewPager.setAdapter(adapter);  
  48.         viewPager.setOnPageChangeListener(new PageChangeListener());  
  49.   
  50.         deleteBtn.setOnClickListener(new View.OnClickListener() {  
  51.   
  52.             @Override  
  53.             public void onClick(View v) {  
  54.                 if (listViews.size() > 0) {  
  55.                     listViews.remove(index);  
  56.                     adapter.notifyDataSetChanged();  
  57.                 }  
  58.             }  
  59.         });  
  60.     }  
  61.   
  62.     private class PageChangeListener implements OnPageChangeListener {  
  63.   
  64.         @Override  
  65.         public void onPageScrollStateChanged(int arg0) {  
  66.   
  67.         }  
  68.   
  69.         @Override  
  70.         public void onPageScrolled(int arg0, float arg1, int arg2) {  
  71.   
  72.         }  
  73.   
  74.         @Override  
  75.         public void onPageSelected(int arg0) {  
  76.             Toast.makeText(getApplicationContext(), arg0 + "", 0).show();  
  77.             index = arg0;  
  78.         }  
  79.   
  80.     }  
  81. }  
第四步:是有关ViewPager的适配器的重写。代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package net.loonggg.viewpager;  
  2.   
  3. import java.util.List;  
  4.   
  5. import android.support.v4.view.PagerAdapter;  
  6. import android.view.View;  
  7. import android.view.ViewGroup;  
  8.   
  9. public class ViewPagerAdapter extends PagerAdapter {  
  10.     private List<View> list;  
  11.   
  12.     public ViewPagerAdapter(List<View> list) {  
  13.         this.list = list;  
  14.     }  
  15.   
  16.     @Override  
  17.     public int getCount() {  
  18.   
  19.         if (list != null && list.size() > 0) {  
  20.             return list.size();  
  21.         } else {  
  22.             return 0;  
  23.         }  
  24.     }  
  25.   
  26.     @Override  
  27.     public boolean isViewFromObject(View arg0, Object arg1) {  
  28.         return arg0 == arg1;  
  29.     }  
  30.   
  31.     @Override  
  32.     public void destroyItem(ViewGroup container, int position, Object object) {  
  33.         container.removeView((View) object);  
  34.     }  
  35.   
  36.     @Override  
  37.     public Object instantiateItem(ViewGroup container, int position) {  
  38.         container.addView(list.get(position));  
  39.         return list.get(position);  
  40.     }  
  41.   
  42.     @Override  
  43.     public int getItemPosition(Object object) {  
  44.         return POSITION_NONE;  
  45.     }  
  46.   
  47. }  
到这里有关ViewPager的使用就讲完了, 其实更重要的是想讲:如何解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题 。

具体讲解如下:

Google在Android 3.0SDK中推出的ViewPager控件很大程度上满足了开发者开发页面左右移动切换的功能,使用非常方便。但是使用中发现,在删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅通过notifyDataSetChanged方法通知刷新View。
最基本的方法:
针对于child view比较简单的情况(例如仅有TextView、ImageView等,没有ListView等展示数据的情况),可以在自己的Adapter中加入代码:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. @Override    
  2. public int getItemPosition(Object object) {    
  3.     return POSITION_NONE;    
  4. }    
这样既可达到一般情况下要求的效果。
存在的问题:
这不是PagerAdapter中的Bug,通常情况下,调用notifyDataSetChanged方法会让ViewPager通过Adapter的getItemPosition方法查询一遍所有child view,这种情况下,所有child view位置均为POSITION_NONE,表示所有的child view都不存在,ViewPager会调用destroyItem方法销毁,并且重新生成,加大系统开销,并在一些复杂情况下导致逻辑问题。特别是对于只是希望更新child view内容的时候,造成了完全不必要的开销。
更有效地方法:
更为靠谱的方法是因地制宜,根据自己的需求来实现notifyDataSetChanged的功能,比如,在仅需要对某个View内容进行更新时,在instantiateItem()时,用View.setTag方法加入标志,在需要更新信息时,通过findViewWithTag的方法找到对应的View进行更新即可。
eNSP无法启动AR报错码40,而且按照eNSP帮助手册排查都没用,我的处理方法【自己存档版】 阅读详情

相关推荐

linux操作系统使用以太网连接ubuntu,设置固定ipv4

首先,您需要确定要配置的网络接口。可以使用ifconfig -a或ip addr命令来列出当前系统上的所有网络接口及其相关信息。找到您要配置的网络接口名称,例如eth0、ens33或enp0s3;保存并关闭文件后,您需要重启网络服务以使更改生效。在linux操作系统中,要使用交换机连接以太网可以直接使用交互界面;如果你的操作系统没有交互界面,你可以使用命令方式配置;点击ipv4,方式为手动,可以设置ip和子网了;开头,后接网络接口名称。第三步:点击有线最右边圆形控件;第二步:点击有线设置;

2301_79311842的博客 2404

Android PagerAdapter notifyDatasetChanged

forget to call notifyDatasetChanged 错误这几天一直在完善之前自己的写的Android应用。想用ViewPager让之前界面能够滑动阅读。但是滑动过程中,经常会莫名其妙地遇到一个问题。莫名其妙地提示ViewPager expected 10 counts,but found 20. forget to call notifyDatasetChanged. 意思很明

破磬 1507

保姆级教程:在Ubuntu 20.04上搞定PX4飞控与T265的视觉定位(附避坑指南)

本文提供在Ubuntu 20.04上配置PX4飞控与T265视觉定位系统的详细教程,涵盖驱动安装、ROS与MAVROS桥接、PX4参数调优及故障排查。通过实测验证的步骤和避坑指南,帮助开发者实现厘米级精度的视觉定位,特别适合室内无人机应用。

weixin_29038155的博客 248

viewpager中点击item问题,viewpager中onclick失效问题

viewpager的onClicked事件失效可以在adapter中的instantiateItem()方法里面设置点击事件如: @Override public Object instantiateItem(View arg0, int arg1) { ImageView imgView=imageViews.get(arg1); ((ViewPager) arg0).addV

lebron_wei的专栏 9098

RS-485调试踩坑实录:MAX13487数据回环问题排查与修复(附电路图)

本文深入解析了RS-485通信中MAX13487芯片的数据回环问题,提供了详细的排查过程和解决方案。通过分析芯片特性和自动换向机制,揭示了RO引脚配置不当是导致问题的关键原因,并给出硬件(添加上拉电阻)和软件(调整MCU配置)两种修复方案,附有优化设计建议和实际调试技巧。

play7的博客 1297

基于微信小程序的扫码签到系统源码

大等于jdk1.8,大于mysql5.5,idea(eclipse),微信开发者工具。代码注释齐全,没有多余代码,适合学习(毕设),二次开发,包含论文技术相关文档。签到管理:新增签到,点击查看码展示二维码(有时效性)springboot mybatis 小程序。签到管理:查看用户创建的签到,可删除。用户管理:查看注册用户信息,及删除。签到记录:查看用户签到记录:可删除。个人信息:展示个人信息,可修改。统计分析:查看用户,签到数量。签到记录:查看用户签到记录。登录注册(含授权登录)我的签到:查看签到记录。

wfuhui的博客 5224

ViewPager2实现画廊效果执行notifyDataSetChanged后PageTransformer显示异常 界面变形问题

项目中要用到画廊滑动效果,选择了用ViewPager2的CompositePageTransformer去实现, val compositePageTransformer = CompositePageTransformer() compositePageTransformer.addTransformer(MarginPageTransformer(dip2px(20f))) compositePageTransfor...

Jason_HD的博客 1994

DroidGuard虚拟机逆向解析:指令集、密钥派生与反调试机制

DroidGuard是Google在Android生态中部署的轻量级定制虚拟机,用于设备完整性校验。其核心原理是通过自解释字节码、多层混淆指令集与动态密钥派生机制,在ART运行时构建静默安全沙箱。技术价值在于规避传统API检测盲区,实现高鲁棒性环境感知;典型应用场景包括金融SDK风控、Play Services可信启动及合规性审计。本文深入拆解其4字节指令编码规则、基于设备指纹的三阶段密钥派生(SHA256→Feistel→AES)、以及五层反调试体系(ptrace快照、时间差分、内存页探测、指令流校验、服

weixin_32736961的博客 587

ViewPager的notifyDataSetChanged()没有效果?来从源码上解决这个问题

前言 最近发现自己有很多颇为基础的内容“不会写”了,就比如今天写的内容:ViewPager。 最近有小伙伴,在后台私信一些技术细节,大家真的好勤奋~~因为工作的原因,有些私信回复的不是很及时,多多包涵。996伤不起啊! 正文 平时我们很容易遇到这样的需求:页面底部很多Tab,可以点击或者活动切换不同的页面…估计话还没有说完,有朋友就会脱口而出:ViewPager+ Fragment实现。 说起...

Android里的一个彩笔 1024

UG NX二次开发(C#)-VS2022配置NX二次开发模板不能正常显示的问题

随着VS2022的发布,使用VS2022进行UG NX二次开发的人员也会越来越多,但是由于VS2022和以前的VS版本采用代码结构不同,而UG NX的二次开发编程模板还没有适应于VS2022的模板配置,所以不能正常的创建一个完整的工程。本文采用曲线救国的方式来实现VS2022下的UG NX二次开发。如果有读者能很好的解决模板配置,不吝赐教。

GimiGimmy 4274

华为OD机考双机位C卷 - 评委评分 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 评委评分 (OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1750

ViewPager2 解决Fragment数据不刷新的问题

一、前言在最近使用ViewPager2显示多个Fragment的时候遇到一个问题,就是我在删除某个fragment的时候发现更新适配器后页面并没有和如期的一样删除这个fragment,看下到底发生了什么?二、问题剖析一般我们刷新页面常用的方法是调用适配器的方法,我们先看下的适配器更新方法都干啥了?可以看出,更新调用的是的适配器方法,所以从这里我们也可以很直观的知道,跟不一样的是使用的适配器不一样,是基于的适配器策略基础上实现的,在这里就不细说了。先看这个方法,从上面可以看出,适配器内部用。

weixin_53545232的博客 2063

优快云独家 | 全网首发 | 《目标检测蓝皮书》目录

10篇文章从目标检测小白变大神

Coding... 3万+

解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题

Google在Android 3.0SDK中推出的ViewPager控件很大程度上满足了开发者开发页面左右移动切换的功能,使用非常方便,参见:http://jameszhao84.iteye.com/blog/1344584。但是使用中发现,在删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅通过notifyDataSetChanged方法通知刷新View。

YUZHIBOYI的专栏 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题(转)

Google在Android 3.0SDK中推出的ViewPager控件很大程度上满足了开发者开发页面左右移动切换的功能,使用非常方便,参见:http://jameszhao84.iteye.com/blog/1344584。但是使用中发现,在删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅通过notifyDataSetChanged方法通知刷新View。 ...

阳光雨露 358

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

有关ViewPager使用及解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题

ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->properties->Java Build Path->Libraries->Add External Jars中加入sdk目录下的extras/android/support/v4/android-support

非著名程序员 6万+

解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效问题(从notifyDataSetChanged方法的源码入手,超详细)

从PagerAdapter的notifyDataSetChanged方法源码入手解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效的解决办法。 周末了,总结一下最近在项目中通过`ViewPager`和`PhotoView`做一个照片查看器的效果,调用`notifyDataSetChanged`方法无法更新界面的问题

马彦虎的博客 7601

ViewPager数据修改使用notifyDataSetChanged无刷新的问题

最近使用viewpager的时候遇到一个问题,viewpager设置过pagerAdapter之后,当需要修改viewpager的数据时,使用pagerAdapter.notifyDataSetChanged方法似乎并没有完全生效。例如,第一次设置viewpager的数据为2页,然后减少为1页时,会出现第2页仍然能翻动却不能停留在第2页的现象。接下来,通过读源码来找寻原因和解决方案。一、ViewPa

荷小筱的程式之旅 4076

解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题

Google在Android 3.0SDK中推出的ViewPager控件很大程度上满足了开发者开发页面左右移动切换的功能,使用非常方便。但是使用中发现,在删除或者修改数据的时候,PagerAdapter无法像BaseAdapter那样仅通过notifyDataSetChanged方法通知刷新View。 最基本的方法: 针对于child view比较简单的情况(例如仅有TextView、Imag

西北狼神 3894

有关Viewpager 在pageAdapter中调用notifyDataSetChanged失效的问题

遇见这个问题的时候 我开始并没有想到是viewpager的特殊导致的    可经过搜索以后发现有很多朋友遇到这个问题 大部分解决的办法是重写pageAdapter里的这个方法@Override public int getItemPosition(Object object) { return POSITION_NONE; } 但是依然有很多朋友没有解决问题 我

故作坚强的专栏 1689

Android学习笔记——关于Android ViewPager 在 adapter.notifyDataSetChanged 后 setCurrentItem 方法失效的解决办法

今天遇到了一个项目上的bug,就是在使用 ViewPager 连接 多个 Fragment 做切换时,ViewPager 的 setCurrentItem方法 只在首次显示Fragment 生效而往后失效这么一个问题;举个复现例子,就是若我首次启动这个Fragment,滑动ViewPager 使 CurrentItem的位置为3;然后关掉 Fragment,再启动,那么该次启动的Fragment

DXDRush的博客 6439

由ViewPager动态适配Item的高度引发的“血案”

需求背景:在RecyclerView做的列表页面添加一个ViewPager效果,这种嵌套问题有很多坑,但是也得硬着头皮做下去,下面把遇到的问题慢慢抛出来。 1、RecyclerView嵌套ViewPager滑动冲突,ViewPager上划无效 参考:https://www.jianshu.com/p/ee9ebd9adad6 2、RecyclerView嵌套ViewPager高度显示问题 一般情况...

qq_31010739的博客 1089

(4.0.23.9)解决ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题

症状 ViewPager的数据源更新了下,调用notifyDataSetChanged后,ViewPager内容并未发生变化,但是滑动下就显示新内容了 使用ViewPager做滑动切换图片的效果时,如果图片是从网络下载的,那么再子线程中下载完图片时我们会使用handler通知UI线程,然后UI线程就可以调用mViewPager.getAdapter().notifyDataSetChanged

JAVA成长之路 503

ViewPager.notifyDataSetChanged() 失效问题

转载一篇: 为什么调用 FragmentPagerAdapter.notifyDataSetChanged() 并不能更新其 Fragment?

幺鹿 1010

Android-ViewPager中调用notifyDataSetChanged失效问题--setItemPosition--POSITION_NONE

最基本的方法: 针对于child view比较简单的情况(例如仅有TextView、ImageView等,没有ListView等展示数据的情况),可以在自己的Adapter中加入代码: @Override public int getIte...

diaopo9520的博客 285
上一篇: ViewPager onPageChangeListener总结
下一篇: Android的onCreateOptionsMenu()创建菜单Menu详解
bingbing1110
博客等级 码龄16年 5粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值