banner实现无限轮播+下拉刷新上拉加载+ 下拉时 listview 和轮播图一起刷新
来源:互联网 发布:淘宝首页设计怎么设计 编辑:程序博客网 时间:2024/05/21 06:12
//首先把所需要的依赖包导入 gson jar包、imageLoader jar包、banner1.4.9jar包、design jar包,,,然后导入library,新建项目,把library导入项目中
//添加权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
android:name=".MyApplication"drawable包下 rb_selector布局
<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@android:color/holo_red_dark"></item> <item android:drawable="@android:color/holo_blue_dark"></item></selector>layout包下 activity_main布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.samsung.sunfuliang10241.MainActivity"> <RadioGroup android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/rel_navigate" android:layout_alignParentBottom="true"> <RadioButton android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="首页" android:button="@null" android:gravity="center" android:id="@+id/rb_index" android:padding="3dp" android:background="@drawable/rb_selector" android:checked="true"/> <RadioButton android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="发现" android:button="@null" android:padding="3dp" android:gravity="center" android:id="@+id/rb_discovery" android:background="@drawable/rb_selector"/> <RadioButton android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="下载" android:button="@null" android:gravity="center" android:padding="3dp" android:id="@+id/rb_down" android:background="@drawable/rb_selector"/> <RadioButton android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="我的" android:padding="3dp" android:button="@null" android:gravity="center" android:id="@+id/rb_me" android:background="@drawable/rb_selector"/> </RadioGroup> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/rel_navigate" android:id="@+id/main_content"></FrameLayout></RelativeLayout>layout包下 discover_layout布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tv" android:text="这是发现页面" android:textColor="#f00" /></LinearLayout>layout包下 down_layout布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tv" android:text="这是下载页面" android:textColor="#f00" /></LinearLayout>layout包下 index_layout布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center"> <android.support.design.widget.TabLayout android:layout_width="match_parent" android:layout_height="40dp" app:tabGravity="center" app:tabIndicatorColor="@color/colorAccent" app:tabMode="scrollable" app:tabSelectedTextColor="@color/colorPrimaryDark" app:tabTextColor="@color/colorPrimary" android:id="@+id/myTab" ></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/vp" ></android.support.v4.view.ViewPager></LinearLayout>layout包下 item布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:layout_width="60dp" android:layout_height="60dp" android:id="@+id/img"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tv_title"/></LinearLayout>layout包下 me_layout布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" > <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tv" android:text="这是我页面" android:textColor="#f00" /></LinearLayout>layout包下 recommend_layout布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:ptr="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.handmark.pulltorefresh.library.PullToRefreshScrollView android:id="@+id/refresh_scroll_view" android:layout_width="match_parent" android:layout_height="match_parent" ptr:ptrAnimationStyle="flip" ptr:ptrDrawable="@drawable/default_ptr_flip" ptr:ptrHeaderBackground="#383838" ptr:ptrHeaderTextColor="#FFFFFF"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.youth.banner.Banner android:id="@+id/myBanner" android:layout_width="match_parent" android:layout_height="200dp"></com.youth.banner.Banner> <views.MyListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv"></views.MyListView> </LinearLayout> </com.handmark.pulltorefresh.library.PullToRefreshScrollView></LinearLayout>layout包下 test 布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <com.youth.banner.Banner android:layout_width="match_parent" android:layout_height="200dp" android:id="@+id/myBanner"></com.youth.banner.Banner> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv"></ListView> </LinearLayout></LinearLayout>主包下MainActivity 类
public class MainActivity extends AppCompatActivity { private RadioGroup radioGroup; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); radioGroup = (RadioGroup) findViewById(R.id.rel_navigate); radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { if(checkedId==R.id.rb_index){ addFragment(new IndexFragment()); }else if(checkedId==R.id.rb_discovery){ addFragment(new DiscoveryFragment()); }else if(checkedId==R.id.rb_down){ addFragment(new DownFragment()); }else if(checkedId==R.id.rb_me){ addFragment(new MeFragment()); } } }); //默认添加"首页" addFragment(new IndexFragment()); } /** * 添加fragment到主页面中 * @param fragment */ public void addFragment(Fragment fragment){ getSupportFragmentManager().beginTransaction().replace(R.id.main_content,fragment).commit(); }}主包下 MyApplication 类
public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); //初使化 ImageloaderUtil.initConfig(this); }}adapter包下 MyAdapter 类
public class MyAdapter extends BaseAdapter { private List<Result.DataEntity> datas; private Context context; public MyAdapter(List<Result.DataEntity> datas, Context context) { this.datas = datas; this.context = context; } @Override public int getCount() { return datas.size(); } @Override public Object getItem(int position) { return datas.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder ; if(convertView==null){ convertView=View.inflate(context, R.layout.item,null); holder=new ViewHolder(); holder.tvTitle= convertView.findViewById(R.id.tv_title); holder.img=convertView.findViewById(R.id.img); convertView.setTag(holder); }else{ holder=(ViewHolder) convertView.getTag(); } holder.tvTitle.setText(datas.get(position).getTITLE()); if(datas.get(position).getIMAGEURL()==null || datas.get(position).getIMAGEURL().equals("")){ holder.img.setImageResource(R.mipmap.ic_launcher); }else{ //imageLoader加载图片 ImageLoader.getInstance().displayImage(datas.get(position).getIMAGEURL(),holder.img, ImageloaderUtil.getImageOptions()); } return convertView; } class ViewHolder{ TextView tvTitle; ImageView img; }}adapter包下 MyPagerAdapter 类
public class MyPagerAdapter extends FragmentPagerAdapter { //标题 private List<String> titles; public MyPagerAdapter(FragmentManager fm, List<String> titles) { super(fm); this.titles = titles; } //返回标题 @Override public CharSequence getPageTitle(int position) { return titles.get(position); } @Override public Fragment getItem(int position) { //暂时返回“推荐页面” return new RecommendFragment(); } @Override public int getCount() { return titles.size(); }}Bean包下 Result 类public class Result { /** * result : success * dataScroll : [{"FROMNAME":"九三学社中央宣传部","SUBTITLE":null,"SHOWTIME":"2017-10-15","ID":"30310406","IMAGEURL":"/11002/upload/webcms/content/image/2017/10/15/14_56_29_117_12420_01.jpg","RN":1,"TITLE":"九三学社中央科学座谈会聚焦文物考古与丝绸之路"},{"FROMNAME":"九三学社湖北省委","SUBTITLE":null,"SHOWTIME":"2017-10-09","ID":"30f6c95527b447528511d105333fbf56","IMAGEURL":"/11002/upload/webcms/content/image/2017/10/09/14_11_02_821_12967_01.jpg","RN":2,"TITLE":"邵鸿率队赴十堰调研"},{"FROMNAME":"九三学社宁夏区委","SUBTITLE":null,"SHOWTIME":"2017-09-27","ID":"30081029","IMAGEURL":"/11002/upload/webcms/content/image/2017/09/27/08_57_48_840_53302_01.jpg","RN":3,"TITLE":"九三学社宁夏区委文化传承报告会在银召开 丛斌做报告"},{"FROMNAME":"团结报","SUBTITLE":"\u2014\u2014记九三学社中央助力\u201c海科会\u201d举办","SHOWTIME":"2017-09-26","ID":"29753347","IMAGEURL":"/11002/upload/webcms/content/image/2017/09/20/09_11_17_163_37240_01111.jpg","RN":4,"TITLE":"主打\u201c科技牌\u201d 彰显\u201c科技范儿\u201d"},{"FROMNAME":"九三学社自贡市委","SUBTITLE":null,"SHOWTIME":"2017-09-21","ID":"6d356ad135454b9db3c2b333dea8c381","IMAGEURL":"/11002/upload/webcms/content/image/2017/09/21/11_12_58_489_41459_20170914093742676.jpg","RN":5,"TITLE":"韩启德:始终保持绿色发展定力 谱写\u201c中国梦\u201d自贡篇章"}] * data : [{"FROMNAME":"九三学社中央宣传部","SUBTITLE":"Get the Flash Player to see this player.","SHOWTIME":"2017-10-19","ID":"30310476","IMAGEURL":null,"RN":1,"TITLE":"九三学社中央致信祝贺中共十九大胜利召开"},{"FROMNAME":"九三学社中央宣传部","SUBTITLE":"10月18日,举世瞩目的中国共产党第十九次全国代表大会在北京隆重开幕。 九三学社","SHOWTIME":"2017-10-18","ID":"30310443","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/18/20_41_29_761_28057_hanqide.jpg","RN":2,"TITLE":"九三学社中央领导列席中共十九大开幕会"},{"FROMNAME":"九三学社中央宣传部","SUBTITLE":"中共十九大隆重开幕了。这是在全面建成小康社会关键阶段、中国特色社会主义进入新时代","SHOWTIME":"2017-10-19","ID":"30310450","IMAGEURL":null,"RN":3,"TITLE":"韩启德:学习中共十九大精神 建设新时代中国特色社会主义参政党"},{"FROMNAME":"新华网","SUBTITLE":"新华社合肥10月23日电(记者 徐海涛)记者从中国科学技术大学获悉,九三学社中央","SHOWTIME":"2017-10-24","ID":"30441488","IMAGEURL":null,"RN":4,"TITLE":"我国科学家在一维量子液体研究领域获重要进展"},{"FROMNAME":"九三学社上海市委","SUBTITLE":"10月23日上午,九三学社中央副主席、上海市政协副主席、九三学社上海市委主委赵雯","SHOWTIME":"2017-10-23","ID":"30441487","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/23/16_38_56_567_80995_11.jpg","RN":5,"TITLE":"赵雯与九三学社上海城乡建设和交通委员会社员共同学习中共十九大报告精神"},{"FROMNAME":"九三学社广西区委","SUBTITLE":"习近平总书记代表中共第十八届中央委员会作的报告大气磅礴、内涵丰富,3万多字的报告","SHOWTIME":"2017-10-23","ID":"30441486","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/23/16_32_59_560_14078_lb.jpg","RN":6,"TITLE":"李彬:不忘初心共赴新征程 牢记使命迈向新时代"},{"FROMNAME":"九三学社河北省委","SUBTITLE":"金秋十月,中国共产党第十九次全国代表大会在北京胜利开幕,中华民族伟大复兴征程揭开","SHOWTIME":"2017-10-23","ID":"30441485","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/23/16_30_11_829_23882_bba1cd11728b471040bb0064c5cec3fdfd032386.jpg","RN":7,"TITLE":"葛会波:坚定政治信念 奋力夺取新时代中国特色社会主义伟大胜利"},{"FROMNAME":"九三学社中央宣传部","SUBTITLE":"坐在十九大开幕式现场,聆听习近平总书记的报告,心中感受可以用八个字来概括。 感慨","SHOWTIME":"2017-10-22","ID":"30441476","IMAGEURL":null,"RN":8,"TITLE":"邵鸿:明使命 干实事 上台阶"},{"FROMNAME":"九三学社中央宣传部","SUBTITLE":"太行山东麓、滹沱河北岸,珠藏玉蕴,山川毓秀。坐落在景色优美的太行深处的西柏坡中学","SHOWTIME":"2017-10-22","ID":"30441475","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/22/22_12_58_629_76523_tp1.jpg","RN":9,"TITLE":"九三人情系革命老区 \u201c邬玉良奖学金\u201d温暖莘莘学子"},{"FROMNAME":"九三学社四川省委","SUBTITLE":"10月17日,全国政协副主席、九三学社中央主席韩启德在京听取筹建\u201c中国\u2022李庄中学","SHOWTIME":"2017-10-20","ID":"30441473","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/23/09_50_47_137_74167_mmexport1508723175976.jpg","RN":10,"TITLE":"韩启德:助力李庄中学向一流学校迈进"},{"FROMNAME":"中国网","SUBTITLE":"10月18日,中国共产党第十九次代表大会胜利开幕。习近平同志在十九大报告\u201c繁荣发","SHOWTIME":"2017-10-20","ID":"30441474","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/20/21_43_36_913_34979_c03fd54abc3e1b541de80f.png","RN":11,"TITLE":"刘月宁:创作和传播\u201c讲格调\u201d的中国音乐作品是我的使命"},{"FROMNAME":"九三学社上海市委","SUBTITLE":"10月20日下午,九三学社中央副主席、市政协副主席、社上海市委主委赵雯主持召开九","SHOWTIME":"2017-10-20","ID":"30441472","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/20/21_05_32_294_15709_1.webp.jpg","RN":12,"TITLE":"学习中共十九大报告精神 赵雯主持召开主委会议并与社纺织委员会社员座谈"},{"FROMNAME":"九三学社贵州省委","SUBTITLE":"中国共产党第十九次全国代表大会是在全面建成小康社会决胜阶段、中国特色社会主义进入","SHOWTIME":"2017-10-20","ID":"30375951","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/20/17_09_02_747_49499_hzh.jpg","RN":13,"TITLE":"黄宗洪:不忘合作初心 牢记职责使命"},{"FROMNAME":"九三学社中央宣传部","SUBTITLE":"九三学社福建省委主委 洪捷序 在全面建成小康社会决胜阶段、中国特色社会主义发展","SHOWTIME":"2017-10-20","ID":"30375950","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/20/15_50_56_979_66831_hzwbzz.jpg","RN":14,"TITLE":"九三学社省级主委畅谈十九大(二)"},{"FROMNAME":"九三学社黑龙江省委","SUBTITLE":"习近平同志在党的十九大报告中指出:\u201c坚持长期共存、互相监督、肝胆相照、荣辱与共,","SHOWTIME":"2017-10-20","ID":"30375949","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/20/11_36_06_843_77987_574e9258d109b3def515ea72cebf6c81800a4c05.jpg","RN":15,"TITLE":"庞达:站准新时代方位建设高素质的中国特色社会主义参政党省级组织"},{"FROMNAME":"九三学社上海市委","SUBTITLE":"10月18日,中国共产党第十九次全国代表大会在北京人民大会堂隆重开幕。习近平代表","SHOWTIME":"2017-10-20","ID":"30375940","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/20/09_48_22_056_33850_640.jpg","RN":16,"TITLE":"九三学社上海市委热议中共十九大报告"},{"FROMNAME":"九三学社北京市委","SUBTITLE":"九三学社中央书画院、北京九三书画院联合举办书画交流笔会","SHOWTIME":"2017-10-20","ID":"04317e3c443b43f7b990b348223b2806","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/20/14_50_47_586_50115_05bacfd511734eabb12980b50b979ddf_4M1A8675.jpg","RN":17,"TITLE":"迎庆十九大 丹青颂祖国"},{"FROMNAME":"人民政协报","SUBTITLE":"听了党的十九大报告,非常振奋人心。报告指出,要着力解决突出环境问题。坚持全民共治","SHOWTIME":"2017-10-20","ID":"30375939","IMAGEURL":null,"RN":18,"TITLE":"吴鸿:从牛栏猪栏到茶吧咖啡厅"},{"FROMNAME":"《中国政协》杂志","SUBTITLE":"对政协委员来说,提案绝不是简单地提交上去一张A4纸,一字一句中,都凝结着民生期待","SHOWTIME":"2017-10-20","ID":"30375938","IMAGEURL":"http://www.93.gov.cn/11002/upload/webcms/content/image/2017/10/20/09_34_08_420_90534_11.jpg","RN":19,"TITLE":"吴鸿:为基层一线建言"},{"FROMNAME":"人民网-观点频道","SUBTITLE":"习近平总书记向党的十九大所作的报告,除了振奋人心、牵动全球的\u201c新时代\u201d、\u201c新思想","SHOWTIME":"2017-10-20","ID":"30375937","IMAGEURL":null,"RN":20,"TITLE":"陈利浩:有感于十九大报告的\u201c情怀\u201d"}] */ private String result; private List<DataScrollEntity> dataScroll; private List<DataEntity> data; public void setResult(String result) { this.result = result; } public void setDataScroll(List<DataScrollEntity> dataScroll) { this.dataScroll = dataScroll; } public void setData(List<DataEntity> data) { this.data = data; } public String getResult() { return result; } public List<DataScrollEntity> getDataScroll() { return dataScroll; } public List<DataEntity> getData() { return data; } public class DataScrollEntity { /** * FROMNAME : 九三学社中央宣传部 * SUBTITLE : null * SHOWTIME : 2017-10-15 * ID : 30310406 * IMAGEURL : /11002/upload/webcms/content/image/2017/10/15/14_56_29_117_12420_01.jpg * RN : 1 * TITLE : 九三学社中央科学座谈会聚焦文物考古与丝绸之路 */ private String FROMNAME; private String SUBTITLE; private String SHOWTIME; private String ID; private String IMAGEURL; private int RN; private String TITLE; public void setFROMNAME(String FROMNAME) { this.FROMNAME = FROMNAME; } public void setSUBTITLE(String SUBTITLE) { this.SUBTITLE = SUBTITLE; } public void setSHOWTIME(String SHOWTIME) { this.SHOWTIME = SHOWTIME; } public void setID(String ID) { this.ID = ID; } public void setIMAGEURL(String IMAGEURL) { this.IMAGEURL = IMAGEURL; } public void setRN(int RN) { this.RN = RN; } public void setTITLE(String TITLE) { this.TITLE = TITLE; } public String getFROMNAME() { return FROMNAME; } public String getSUBTITLE() { return SUBTITLE; } public String getSHOWTIME() { return SHOWTIME; } public String getID() { return ID; } public String getIMAGEURL() { return IMAGEURL; } public int getRN() { return RN; } public String getTITLE() { return TITLE; } } public class DataEntity { /** * FROMNAME : 九三学社中央宣传部 * SUBTITLE : Get the Flash Player to see this player. * SHOWTIME : 2017-10-19 * ID : 30310476 * IMAGEURL : null * RN : 1 * TITLE : 九三学社中央致信祝贺中共十九大胜利召开 */ private String FROMNAME; private String SUBTITLE; private String SHOWTIME; private String ID; private String IMAGEURL; private int RN; private String TITLE; public void setFROMNAME(String FROMNAME) { this.FROMNAME = FROMNAME; } public void setSUBTITLE(String SUBTITLE) { this.SUBTITLE = SUBTITLE; } public void setSHOWTIME(String SHOWTIME) { this.SHOWTIME = SHOWTIME; } public void setID(String ID) { this.ID = ID; } public void setIMAGEURL(String IMAGEURL) { this.IMAGEURL = IMAGEURL; } public void setRN(int RN) { this.RN = RN; } public void setTITLE(String TITLE) { this.TITLE = TITLE; } public String getFROMNAME() { return FROMNAME; } public String getSUBTITLE() { return SUBTITLE; } public String getSHOWTIME() { return SHOWTIME; } public String getID() { return ID; } public String getIMAGEURL() { return IMAGEURL; } public int getRN() { return RN; } public String getTITLE() { return TITLE; } }}views包下 MyListView 类public class MyListView extends ListView { public MyListView(Context context) { super(context); } public MyListView(Context context, AttributeSet attrs) { super(context, attrs); } public MyListView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); }}Utils包下 ImageloaderUtil 类public class ImageloaderUtil { /** * ImageLoader的配置 * @param context */ public static void initConfig(Context context) { //配置// File cacheFile=context.getExternalCacheDir(); File cacheFile= new File(Environment.getExternalStorageDirectory()+"/"+"imgages"); ImageLoaderConfiguration config=new ImageLoaderConfiguration.Builder(context) .memoryCacheExtraOptions(480, 800)//缓存图片最大的长和宽 .threadPoolSize(2)//线程池的数量 .threadPriority(4) .memoryCacheSize(2*1024*1024)//设置内存缓存区大小 .diskCacheSize(20*1024*1024)//设置sd卡缓存区大小 .diskCache(new UnlimitedDiscCache(cacheFile))//自定义缓存目录 .writeDebugLogs()//打印日志内容 .diskCacheFileNameGenerator(new Md5FileNameGenerator())//给缓存的文件名进行md5加密处理 .build(); ImageLoader.getInstance().init(config); } /** * 获取图片设置类 * @return */ public static DisplayImageOptions getImageOptions(){ DisplayImageOptions optionsoptions=new DisplayImageOptions.Builder() .cacheInMemory(true)//使用内存缓存 .cacheOnDisk(true)//使用磁盘缓存 .bitmapConfig(Bitmap.Config.RGB_565)//设置图片格式 .build(); return optionsoptions; }}Utils包下 MD5Encoder 类public class MD5Encoder { public static String encode(String string) throws Exception { byte[] hash = MessageDigest.getInstance("MD5").digest(string.getBytes("UTF-8")); StringBuilder hex = new StringBuilder(hash.length * 2); for (byte b : hash) { if ((b & 0xFF) < 0x10) { hex.append("0"); } hex.append(Integer.toHexString(b & 0xFF)); } return hex.toString(); }}Utils包下 MyBannerImageLoader 类public class MyBannerImageLoader extends ImageLoader { @Override public void displayImage(Context context, Object path, ImageView imageView) { //加载图片的还是使用 我们之前学过的 ImageLoader com.nostra13.universalimageloader.core.ImageLoader.getInstance().displayImage(path.toString(),imageView,ImageloaderUtil.getImageOptions()); }}Utils包下 MyTask 类public class MyTask extends AsyncTask<String,Void,String> { //申请一个接口类对象 private Icallbacks icallbacks; //将无参构造设置成私有的,使之在外部不能够调用 private MyTask(){} //定义有参构造方法 public MyTask(Icallbacks icallbacks) { this.icallbacks = icallbacks; } @Override protected String doInBackground(String... params) { String str=""; try { //使用HttpUrlConnection URL url=new URL(params[0]); HttpURLConnection connection=(HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); if(connection.getResponseCode()==200){ InputStream inputStream=connection.getInputStream(); //调用工具类中的静态方法 str=StreamToString.streamToStr(inputStream,"utf-8"); } } catch (MalformedURLException e) { e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析,封装到bean,更新ui组件 icallbacks.updateUiByjson(s); } //定义一个接口 public interface Icallbacks{ /** * 根据回传的json字符串,解析并更新页面组件 * @param jsonstr */ void updateUiByjson(String jsonstr); }}Utils包下 NetStateUtil 类public class MyTask extends AsyncTask<String,Void,String> { //申请一个接口类对象 private Icallbacks icallbacks; //将无参构造设置成私有的,使之在外部不能够调用 private MyTask(){} //定义有参构造方法 public MyTask(Icallbacks icallbacks) { this.icallbacks = icallbacks; } @Override protected String doInBackground(String... params) { String str=""; try { //使用HttpUrlConnection URL url=new URL(params[0]); HttpURLConnection connection=(HttpURLConnection) url.openConnection(); connection.setRequestMethod("GET"); connection.setReadTimeout(5000); connection.setConnectTimeout(5000); if(connection.getResponseCode()==200){ InputStream inputStream=connection.getInputStream(); //调用工具类中的静态方法 str=StreamToString.streamToStr(inputStream,"utf-8"); } } catch (MalformedURLException e) { e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); } return str; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); //解析,封装到bean,更新ui组件 icallbacks.updateUiByjson(s); } //定义一个接口 public interface Icallbacks{ /** * 根据回传的json字符串,解析并更新页面组件 * @param jsonstr */ void updateUiByjson(String jsonstr); }}Utils包下 StreamToString 类public class StreamToString { public static String streamToStr(InputStream inputStream,String chartSet){ StringBuilder builder=new StringBuilder(); try { BufferedReader br=new BufferedReader(new InputStreamReader(inputStream,chartSet)); String con; while ((con=br.readLine())!=null){ builder.append(con); } br.close(); return builder.toString(); } catch (Exception e) { e.printStackTrace(); } return ""; }}fragments包下 DiscoveryFragment 类public class DiscoveryFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v=inflater.inflate(R.layout.discovery_layout,null); return v; }}fragments包下 DownFragment 类public class DownFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v=inflater.inflate(R.layout.down_layout,null); return v; }}fragments包下 IndexFragment 类public class IndexFragment extends Fragment { private TabLayout myTab; private ViewPager viewPager; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v=inflater.inflate(R.layout.index_layout,null); myTab = v.findViewById(R.id.myTab); viewPager = v.findViewById(R.id.vp); return v; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); //初使化标题 List<String> titles=new ArrayList<>(); titles.add("推荐"); titles.add("课程"); titles.add("实战"); titles.add("职业路径"); //设置适配器-注意:传递的fragmentManager是 getChild...... 不是 getSupport... viewPager.setAdapter(new MyPagerAdapter(getChildFragmentManager(),titles)); //设置一次加载所有页面 viewPager.setOffscreenPageLimit(titles.size()); //将tabLayout与viewpager建立关联 myTab.setupWithViewPager(viewPager); }}fragments包下 MeFragment 类public class MeFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v=inflater.inflate(R.layout.me_layout,null); return v; }}fragments包下 RecommendFragment 类public class RecommendFragment extends Fragment { private Banner myBanner; private PullToRefreshScrollView scrollView; private ListView listView; //列表显示的数据 private List<Result.DataEntity> datas=new ArrayList<>(); private MyAdapter myAdapter; //页数 private int startNum=0; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View v=View.inflate(getActivity(), R.layout.recommend_layout,null); myBanner= (Banner) v.findViewById(R.id.myBanner); scrollView = (PullToRefreshScrollView) v.findViewById(R.id.refresh_scroll_view); listView = (ListView) v.findViewById(R.id.lv); return v; } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); initRefreshScrollView(); //请求数据 addToTop(); } public void initRefreshScrollView(){ //设置模式 scrollView.setMode(PullToRefreshBase.Mode.BOTH); //设置头尾布局显示的文本 ILoadingLayout headerLables=scrollView.getLoadingLayoutProxy(true,false); headerLables.setPullLabel("下拉刷新"); headerLables.setRefreshingLabel("正在刷新"); headerLables.setReleaseLabel("松开刷新"); ILoadingLayout footerLables=scrollView.getLoadingLayoutProxy(false,true); footerLables.setPullLabel("上拉加载"); footerLables.setRefreshingLabel("正在加载"); footerLables.setReleaseLabel("松开加载"); //设置监听事件 scrollView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener2<ScrollView>() { @Override public void onPullDownToRefresh(PullToRefreshBase<ScrollView> refreshView) { //下拉刷新 addToTop(); closeRefresh(); } @Override public void onPullUpToRefresh(PullToRefreshBase<ScrollView> refreshView) { //上拉加载更多 addToBottom(); closeRefresh(); } }); } public void addToBottom(){ startNum=startNum+20; //请求数据 MyTask myTask=new MyTask(new MyTask.Icallbacks() { @Override public void updateUiByjson(String jsonstr) { Gson gson=new Gson(); Result result=gson.fromJson(jsonstr, Result.class); //得到列表显示的数据 datas.addAll(result.getData()); //设置适配器 setAdapter(); //设置轮播图 setBanner(result.getDataScroll()); } }); myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum="+startNum); } public void addToTop(){ //请求数据 MyTask myTask=new MyTask(new MyTask.Icallbacks() { @Override public void updateUiByjson(String jsonstr) { Gson gson=new Gson(); Result result=gson.fromJson(jsonstr, Result.class); //清空 datas.clear(); //得到列表显示的数据 datas.addAll(result.getData()); //设置适配器 setAdapter(); //设置轮播图 setBanner(result.getDataScroll()); } }); myTask.execute("http://www.93.gov.cn/93app/data.do?channelId=0&startNum=0"); } /** * 设置轮播图 * @param lists 图片集合数据 */ public void setBanner(List<Result.DataScrollEntity> lists){ if(lists==null){ return; } List<String> picPaths=new ArrayList<>(); for(int i=0;i<lists.size();i++){ Log.d("zzz",""+lists.get(i).getIMAGEURL()); picPaths.add("http://www.93.gov.cn"+lists.get(i).getIMAGEURL()); } myBanner.setImages(picPaths);//设置图片集合 myBanner.setImageLoader(new MyBannerImageLoader());//设置图片加载器 myBanner.isAutoPlay(true);//设置是否是自动播放 myBanner.setDelayTime(2000);//设置每张图片的播放的间隔时间 myBanner.start();//开始执行 } /** * 设置适配器 */ public void setAdapter(){ if(myAdapter==null){ myAdapter=new MyAdapter(datas,getActivity()); listView.setAdapter(myAdapter); }else{ myAdapter.notifyDataSetChanged(); } } /** * 关闭刷新 */ public void closeRefresh(){ new Handler().postDelayed(new Runnable() { @Override public void run() { scrollView.onRefreshComplete(); } },1000); }}
阅读全文
0 0
- banner实现无限轮播+下拉刷新上拉加载+ 下拉时 listview 和轮播图一起刷新
- XlistView的上拉刷新下拉加载 和Fragment 和无限轮播
- RecyclerView的上拉加载下拉刷新和viewpager自动有点无限轮播
- Banner+RecyclerView+上拉刷新下拉加载
- ListView实现下拉刷新和上拉加载
- ListView封装实现下拉刷新和上拉加载
- ListView上拉加载和下拉刷新多种实现方式
- ListView实现上拉加载和下拉刷新
- 自定义控件实现ListView下拉刷新和上拉加载
- ListView下拉刷新和上拉加载更多的实现
- 实现ListView的下拉刷新和上拉加载
- 实现ListView的上拉刷新和下拉加载
- ionic的侧滑,无限轮播,上拉刷新下拉加载
- PullToRefresh下拉刷新、上拉加载更多ViewPage+Handler完成无限轮播
- RecyclerView+SwipeRefreshLayout+ViewPager实现上拉加载更多下拉刷新和添加Banner(附源码)
- listView上拉刷新下拉加载
- Listview 下拉刷新,上拉加载更多
- Android ListView 下拉刷新 上拉加载
- 智能化社会训练
- 栈(4)
- AngularJS用户列表的增删改查样式
- KCF代码分析
- Pandas的 loc iloc ix 区别
- banner实现无限轮播+下拉刷新上拉加载+ 下拉时 listview 和轮播图一起刷新
- ListCtrl----虚拟列表的用法
- 两指针(1)
- C 数组
- 7.0 设置中语言列表语言多出XB XA 两种语言
- 完整三国增删改查,条件查询条件排序,敏感字符“习近平“
- 两指针(2)
- 两指针(3)
- ffmpeg 编译