Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx

上传人:b****2 文档编号:1278155 上传时间:2023-04-30 格式:DOCX 页数:16 大小:177.17KB
下载 相关 举报
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第1页
第1页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第2页
第2页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第3页
第3页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第4页
第4页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第5页
第5页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第6页
第6页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第7页
第7页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第8页
第8页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第9页
第9页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第10页
第10页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第11页
第11页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第12页
第12页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第13页
第13页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第14页
第14页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第15页
第15页 / 共16页
Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx

《Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx(16页珍藏版)》请在冰点文库上搜索。

Android多列表的项目Rxjava+Rtrofit+Recyclerview+Glide+Adapter封装之一项目架构Word文档下载推荐.docx

();

@Override

protectedvoidonCreate(@NullableBundlesavedInstanceState){

super.onCreate(savedInstanceState);

Logger.i("

Activity--->

"

+getClass().getSimpleName());

addActivity(this);

if(getLayoutId()!

=0){

setContentView(getLayoutId());

}else{

thrownewIllegalArgumentException("

返回一个正确的ContentView"

);

}

ButterKnife.bind(this);

//ButterKnife必须在这里bing,也就是初始化,那么其余activity就不用顾及这个了

initView();

//模板模式

initEvent();

loadData();

protectedabstractintgetLayoutId();

protectedabstractvoidinitView();

protectedabstractvoidinitEvent();

protectedabstractvoidloadData();

protectedvoidonPause(){

super.onPause();

removeActivity(this);

//释放所有资源

//添加Activity到容器中

privatevoidaddActivity(Activityactivity){

if(activity!

=null&

&

!

activities.contains(activity)){

activities.add(activity);

privatevoidremoveActivity(Activityactivity){

activities.contains(activity)){

activities.remove(activity);

//退出整个APP

publicstaticvoidexit(){

if(activities!

activities.size()>

0){

for(Activityactivity:

activities){

activity.finish();

System.exit(0);

}

2.ToolbarActivity是每个activity需要标题栏封装;

主要是为了节省代码,并使得继承此activity的activity得以逻辑更加清晰。

publicabstractclassToolbarActivityextendsBaseActivity{

@BindView(R.id.toolbar)

Toolbartoolbar;

@BindView(R.id.title)

publicTextViewtitle;

toolbar.setTitle("

//节省代码啦,以后app的activity不用再为标题烦恼

setSupportActionBar(toolbar);

if(getSupportActionBar()!

=null){

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

//决定左上角的图标是否可以点击

toolbar.setNavigationOnClickListener(newView.OnClickListener(){

publicvoidonClick(Viewv){

finish();

});

3.DrawerActivity是抽屉activity;

这样写的话,让MainActivity去继承就会使main的代码更加简洁,并且可以复用代码

publicabstractclassDrawerActivityextendsToolbarActivityimplementsNavigationView.OnNavigationItemSelectedListener{

@BindView(R.id.navigation_view)

NavigationViewnavigationView;

@BindView(R.id.drawer_layout)

DrawerLayoutdrawerLayout;

ActionBarDrawerToggledrawerToggle=newActionBarDrawerToggle(this,drawerLayout,toolbar,R.string.drawer_open,R.string.drawer_close);

drawerToggle.syncState();

//该方法会自动和actionBar关联,将开关的图片显示在了action上,如果不设置,也可以有抽屉的效果,不过是默认的图标

drawerLayout.setDrawerListener(drawerToggle);

drawerToggle.setDrawerIndicatorEnabled(false);

toolbar.setNavigationIcon(R.drawable.toolbar_navigation);

//设置那个抽屉图片,主要看美工了,美工要规定那个图片大小,我这里是随便放的

drawerLayout.openDrawer(Gravity.LEFT);

navigationView.setNavigationItemSelectedListener(this);

publicbooleanonNavigationItemSelected(MenuItemitem){

switch(item.getItemId()){

caseR.id.publish:

//跳转的activity在这里建立

//startActivity(newIntent(this,PublishActivity.class));

drawerLayout.closeDrawers();

returntrue;

caseR.id.published:

//startActivity(newIntent(this,PublishedActivity.class));

caseR.id.growth:

//startActivity(newIntent(this,GrowthActivity.class));

break;

caseR.id.collect:

//startActivity(newIntent(this,CollectionActivity.class));

caseR.id.setting:

//startActivity(newIntent(this,SettingActivity.class));

returnsuper.onContextItemSelected(item);

所以继承DrawerActivity的MainActivity的代码就十分的简洁了,而且其他的activity也可以继承ToolbarActivity从而实现复用了。

publicclassMainActivityextendsDrawerActivity{

privatestaticfinalintPAGE_LIMIT=4;

//这里是限定预加载的页面个数,不用Fragment重新去onCreate。

使用这个就是去优化页面,从而viewpager去缓存view

@BindView(R.id.tab_layout)

TabLayouttabLayout;

@BindView(R.id.viewpager)

NoScrollViewPagerviewPager;

protectedintgetLayoutId(){

returnR.layout.activity_main;

protectedvoidinitView(){

protectedvoidinitEvent(){

if(Build.VERSION.SDK_INT>

=Build.VERSION_CODES.M){

StringpackageName=getPackageName();

PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);

if(!

pm.isIgnoringBatteryOptimizations(packageName)){

Intentintent=wIntent();

intent.setAction(android.provider.Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);

intent.setData(Uri.parse("

package:

+packageName));

startActivity(intent);

protectedvoidloadData(){

List<

Fragment>

fragments=newArrayList<

fragments.add(newAbilityFragment());

fragments.add(newAttentionFragment());

fragments.add(newDiscoveryFragment());

fragments.add(newArenaFragment());

ViewPagerAdapteradapter=newViewPagerAdapter(getSupportFragmentManager(),fragments);

viewPager.setAdapter(adapter);

viewPager.setOffscreenPageLimit(PAGE_LIMIT);

tabLayout.setupWithViewPager(viewPager);

for(inti=0;

i<

tabLayout.getTabCount();

i++){

TabLayout.Tabtab=tabLayout.getTabAt(i);

Drawabledrawable=null;

switch(i){

case0:

drawable=ContextCompat.getDrawable(this,R.drawable.tab_item_home);

case1:

drawable=ContextCompat.getDrawable(this,R.drawable.tab_item_attention);

case2:

drawable=ContextCompat.getDrawable(this,R.drawable.tab_item_discovery);

case3:

drawable=ContextCompat.getDrawable(this,R.drawable.tab_item_arena);

if(tab!

tab.setIcon(drawable);

同样的,我们可以看到我写了三个抽象fragment,分别负责不同的业务。

1.BaseFragment。

主要有模板模式的方法,fragment的懒加载

解析懒加载:

setUserVisibleHint方法用于告诉系统,这个Fragment的UI是否是可见的。

所以我们只需要继承Fragment并重写该方法,即可实现在fragment可见时才进行数据加载操作,即Fragment的懒加载。

publicabstractclassBaseFragmentextendsFragment{

privateHandlerhandler=newHandler();

privateRunnableloadDataTask=newRunnable(){

publicvoidrun(){

};

@Nullable

publicViewonCreateView(LayoutInflaterinflater,@NullableViewGroupcontainer,@NullableBndlesavedInstanceState){

Viewview=inflater.inflate(getLayoutId(),container,false);

ButterKnife.bind(this,view);

returnview;

publicvoidonViewCreated(Viewview,@NullableBundlesavedInstanceState){

//延迟加载数据,减少卡顿

handler.postDelayed(loadDataTask,500);

publicvoidsetUserVisibleHint(booleanisVisibleToUser){

super.setUserVisibleHint(isVisibleToUser);

//做了个判断,判断isVisibleToUser只有为true,才去执行loadData()方法加载网络(或本地)数据。

isVisibleToUser){

handler.removeCallbacks(loadDataTask);

2.RecyclerViewFragment,因为RecyclerView在多列表app中占很多部分,所以我抽离它作为一层fragment来编写,方便代码复用。

还有此fragment还要完成下拉刷新的消息通知,子类实现复用。

publicabstractclassRecyclerViewFragmentextendsBaseFragmentimplementsSwipeRefreshLayout.OnRefreshListener{

protectedstaticfinalintREFRESH=0x101;

@BindView(R.id.recycler_view)

RecyclerViewrecyclerView;

@BindView(R.id.swipeRefreshLayout)

SwipeRefreshLayoutswipeRefreshLayout;

protectedRecyclerView.Adapteradapter;

//一个handle让子类覆写onrefresh去通知父类,然后父类调用handler实现复用。

privateHandlerhandler=newHandler(){

publicvoidhandleMessage(Messagemsg){

switch(msg.what){

caseREFRESH:

swipeRefreshLayout.setRefreshing(false);

FullyLinearLayoutManagerlayoutManager=newFullyLinearLayoutManager(getActivity(),LinearLayout.VERTICAL,false);

layoutManager.setSmoothScrollbarEnabled(true);

recyclerView.setLayoutManager(layoutManager);

recyclerView.setNestedScrollingEnabled(false);

swipeRefreshLayout.setSize(SwipeRefreshLayout.LARGE);

swipeRefreshLayout.setColorSchemeResources(R.color.colorArenaGreen,R.color.colorAccent,R.color.colorMainDividerLine);

swipeRefreshLayout.setOnRefreshListener(this);

protectedvoidloadData(){

adapterBuilder();

recyclerView.setAdapter(adapter);

//子activity设置适配器

protectedabstractvoidadapterBuilder();

publicvoidonRefresh(){

//todo网络请求任务

handler.sendEmptyMessageDelayed(REFRESH,3000);

3.BannerFragment主要完成轮播图的封装,考虑广告众多app提供了一层。

publicabstractclassBannerFragmentextendsRecyclerViewFragmentimplementsOnItemClickListener{

privatestaticfinallongLOOP_TIME=5000;

//此轮播使用的是第三方的控件,实际项目开发时为了方便而使用的一个库。

@BindView(R.id.banner)

ConvenientBanner<

String>

convenientBanner;

protectedabstractList<

getBitmapList();

protectedoidloadConvenientBanner(){

convenientBanner.setPages(newCBViewHolderCreator<

LocalImageHolderView>

(){

publicLocalImageHolderViewcre

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2