1, 二级列表(ExpandableListView)
①创建布局,找控件
②获取数据:死数据、网络数据
③创建适配器:10个方法要掌握
④设置适配器
⑤父项、子项点击事件
⑥基本属性
2, Listview手动、自动加载更多
(1) Listview
①创建布局,找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器
(2) Listview手动加载更多
①创建布局,找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器
⑤给Listview添加一个footer
⑥点击footer中button加载更多:page++,获取数据
(3) Listview自动加载更多
①创建布局,找控件
②获取网络数据
③创建适配器:两个优化(必会)
④设置适配器
⑤定义一个变量isBottom表示是否滑到底部
⑥Listview设置滑动监听
3, 侧滑菜单
①添加依赖
②创建布局:DrawerLayout、NavigationView(三个属性、menu)
③设置actionbar:toolbar设置标题、logo、关联toobar和侧滑菜单
④监听事件:头部监听、侧滑菜单监听、DrawerLayout、代买开关侧滑菜单
⑤沉浸式状态栏
4, 选项菜单
①创建选项菜单(onCreateOptionsMenu):两种方式-代码和menu(showAsAction)
②选项菜单的点击事件(onOptionsItemSelected):switch
5, 上下文菜单
①注册上下文菜单:registerForContextMenu()
②创建上下文菜单:onCreateContextMenu()
③上下文菜单点击事件:onContextItemSelected()
5, RecyclerView基本使用
①添加依赖(版本问题注意)
②创建布局(宽高必须是充满的)
③找控件
④设置布局管理器(三种显示方式:线性布局、网格布局、瀑布流布局)
⑤获取数据(切换子线程的方法)
⑥创建适配器-- 重写三个,通过接口回调实现点击事件
⑦设置适配器
7, RecyclerView多布局一:list+banner
① RecyclerView基本使用
②定义类型常量
③重写方法getItemViewType()根据位置返回不同类型
④重写oncreateViewHolder()根据不同类型加载不同的布局
⑤重写onBindViewHolder()根据不用类型加载不同数据
8, RecyclerView多布局二:奇数位置左图右文字+偶数位置左文字右图片
① RecyclerView基本使用(看6)
②定义类型常量
③重写方法getItemViewType()根据位置返回不同类型
④重写oncreateViewHolder()根据不同类型加载不同的布局
⑤重写onBindViewHolder()根据不用类型加载不同数据
注意:没有7中注意
9. RecyclerView通过接口回调实现点击事件
①在adapter定义一个内部接口,内部接口定义一个方法,方法参数是我们需要返回值的;
②在adapter定义接口变量,并设置set方法
③在onBindVIewholder()中,给条目做一个点击事件
④在fragment或者activity中,使用adapter对象调用点击事件即可
10, RecyclerView添加刷新
①添加依赖
②在布局中添加刷新的控件并找控件
③给刷新控件添加加载更多、下拉刷细腻添加监听,监听中写具体代码
④刷新完毕列表,关闭SmartRefreshLayout头和脚。
四、fragment
1. 静态添加fragment
①创建一个fragment
②创建布局,把①中的fragment放到布局中
注意:
①必须要有id,否则:Caused by: java.lang.IllegalArgumentException: Binary XML file line #9: Must specify unique android:id, android:tag, or have a parent with an id for com.anfly.fragmentr.AFragment
②布局中必须添加属性name,值该fragment全类名
2. 动态添加fragment
//获取碎片管理器
FragmentManager fm=getSupportFragmentManager();
//开启事务
FragmentTransaction fragmentTransaction=fm.beginTransaction();
//获取fragment对象
AFragment aFragment=newAFragment();
//替换容器中内容
fragmentTransaction.replace(R.id.fl_container,aFragment);
//提交事务fragmentTransaction.commit();
3. Transaction常用方法
①add
②remove
③replace
④hide
⑤show
⑥attach
⑦detach
⑧commit
4. fragment生命周期
①onAttach()
②onCreate()
③onCreateView()
④onActivityCreated()
⑤onStart()
⑥onResume()
⑦onPause()
⑧onStop()
⑨onDestroyView()
⑩onDestroy()
⑪onDetach()
5. fragment传递数据到activity
①获取activity对象,直接调用方法
MainActivity activity = (MainActivity) getActivity();activity.getMsgFromFramgent("我是来自fragment的数据");
②接口回调传递数据
③通过fragment的有参构造传数据(不推荐)
6. activity传递数据到fragment
①通过bundle方式传值
activity中:
AFragment aFragment=newAFragment();
Bundle bundle=newBundle();bundle.putString("a","我是来自activity的数据");
aFragment.setArguments(bundle);
fragment中:
Bundle bundle=getArguments();
String a=bundle.getString("a");
7. fragment与fragment之间传递数据
①通过构造方式传值(不推荐)
②通过FragmentManager找到对应Id或者Tag的Framgment,然后获取里面的数据或方法
③通过它们所在的Activity作为桥梁,可以使用getActivity()或者接口回调,达到获取另一个Fragment数据的目的.
8. RadioGroup底部导航结合Fragmentr切换
五、ViewPager+tablayout
1. ViewPager结合view实现导航
①创建布局找控件
②获取数据集合
③创建适配器:getCount()isViewFromObject() instantiateItem()destroyItem()
④设置适配器
2. Viewpager结合Fragment实现导航
①创建布局找控件
②获取fragment的集合fragments
③创建适配器:FragmentStatePagerAdapter和FragmentPagerAdapter区别以及内部方法
④设置适配器
3. Banner开源框架
banner.setBannerStyle(BannerConfig.NUM_INDICATOR_TITLE)
//设置风格.setImages(images)
//设置图片集合.setBannerAnimation(Transformer.DepthPage)
//设置动画.setBannerTitles(titles)
//直接添加无效,必须设置BannerStyle.setImageLoader(newGlideImageLoader())
//图片加载器.start();
4, Tablayout
①属性
TVF
①创建布局找控件:TV
②创建两个集合:fragments和titles
③创建适配器:四个方法(包含一个构造)
④设置适配器
⑤TV结合:tab.setupWithViewPager(vp);
⑥设置图片选择器tab.getTabAt(0).setIcon()
```
①创建布局找控件:TV
②创建两个集合:fragments和titles
③创建适配器:四个方法(包含一个构造)
④设置适配器
⑤TV结合:tab.setupWithViewPager(vp);
⑥设置图片选择器tab.getTabAt(0).setIcon()
```
6. TVF涉及到的懒加载