android-多列表的项目(rxjava+rtrofit+recyclerview+glide+adapter封装)之(一)项目架构

上传人:第*** 文档编号:31318302 上传时间:2018-02-06 格式:DOC 页数:12 大小:229KB
返回 下载 相关 举报
android-多列表的项目(rxjava+rtrofit+recyclerview+glide+adapter封装)之(一)项目架构_第1页
第1页 / 共12页
android-多列表的项目(rxjava+rtrofit+recyclerview+glide+adapter封装)之(一)项目架构_第2页
第2页 / 共12页
android-多列表的项目(rxjava+rtrofit+recyclerview+glide+adapter封装)之(一)项目架构_第3页
第3页 / 共12页
android-多列表的项目(rxjava+rtrofit+recyclerview+glide+adapter封装)之(一)项目架构_第4页
第4页 / 共12页
android-多列表的项目(rxjava+rtrofit+recyclerview+glide+adapter封装)之(一)项目架构_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《android-多列表的项目(rxjava+rtrofit+recyclerview+glide+adapter封装)之(一)项目架构》由会员分享,可在线阅读,更多相关《android-多列表的项目(rxjava+rtrofit+recyclerview+glide+adapter封装)之(一)项目架构(12页珍藏版)》请在金锄头文库上搜索。

1、Android-多列表的项目(Rxjava+Rtrofit+Recyclerview+Glide+Adapter 封装)之(一)项目架构项目介绍:1.这是一个简易使用的网络请求封装项目,可快速移植实现安卓网络层的开发;2.这是一个常见的 app 模板,使用较好的 app 架构,并实现一系列的优化。先上几张图看看如例子的两个页面可以看到就是想这样的样式,以及请求,我们在 android 应用开发中经常遇到。好了,废话不多说,下面开始正文。文章结构:(1)整个应用的架构模式;(2)Activity 和 Fragment 的封装;一、整个应用的架构模式:M 层就是我的 bean 包了,C 层则由 a

2、ctivity 来担当,V 层则由自定义 view 以及 xml 文件来担当。contronller(控制器)是一个中间桥梁的作用,通过接口通信来协同 View(视图)和 Model(模型)工作,起到了两者之间的通信作用。二、Activity 和 Fragment 的封装:可以看到,我封装了三层抽象 activity,各自负责不同的业务。这个是很常见的 app 的activity 封装。1.BaseActivity 是 app 设计中的最高父类,则由它处理一些加载的优化,以及使用了模板模式,制定一系列的抽象方法,管理相关的 app 整体功能(如退出整个 app) 。public abstrac

3、t class BaseActivity extends AppCompatActivity /存储全部 activityprivate static List activities = new ArrayList();Overrideprotected void onCreate(Nullable Bundle savedInstanceState) super.onCreate(savedInstanceState);Logger.i(Activity- + getClass().getSimpleName();addActivity(this);if (getLayoutId() !=

4、0) setContentView(getLayoutId(); else throw new IllegalArgumentException(返回一个正确的 ContentView);ButterKnife.bind(this);/ButterKnife 必须在这里 bing,也就是初始化,那么其余activity 就不用顾及这个了initView();/模板模式 initEvent();loadData();protected abstract int getLayoutId();protected abstract void initView();protected abstract

5、void initEvent();protected abstract void loadData();Overrideprotected void onPause() super.onPause();removeActivity(this);/释放所有资源/ 添加 Activity 到容器中private void addActivity(Activity activity) if (activity != null & !activities.contains(activity) activities.add(activity);private void removeActivity(Ac

6、tivity activity) if (activity != null & activities.contains(activity) activities.remove(activity);/ 退出整个 APPpublic static void exit() if (activities != null & activities.size() 0) for (Activity activity : activities) activity.finish();System.exit(0);2.ToolbarActivity 是每个 activity 需要标题栏封装;主要是为了节省代码,并

7、使得继承此activity 的 activity 得以逻辑更加清晰。public abstract class ToolbarActivity extends BaseActivity BindView(R.id.toolbar)Toolbar toolbar;BindView(R.id.title)public TextView title;Overrideprotected void onCreate(Nullable Bundle savedInstanceState) super.onCreate(savedInstanceState);toolbar.setTitle();/节省代码

8、啦,以后 app 的 activity 不用再为标题烦恼setSupportActionBar(toolbar);if (getSupportActionBar() != null) getSupportActionBar().setDisplayHomeAsUpEnabled(true);/决定左上角的图标是否可以点击toolbar.setNavigationOnClickListener(new View.OnClickListener() Overridepublic void onClick(View v) finish(););3.DrawerActivity 是抽屉 activit

9、y;这样写的话,让 MainActivity 去继承就会使 main 的代码更加简洁,并且可以复用代码public abstract class DrawerActivity extends ToolbarActivity implements NavigationView.OnNavigationItemSelectedListener BindView(R.id.navigation_view)NavigationView navigationView;BindView(R.id.drawer_layout)DrawerLayout drawerLayout;Overrideprotect

10、ed void onCreate(Nullable Bundle savedInstanceState) super.onCreate(savedInstanceState);ActionBarDrawerToggle drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close);drawerToggle.syncState();/该方法会自动和 actionBar 关联, 将开关的图片显示在了action 上,如果不设置,也可

11、以有抽屉的效果,不过是默认的图标 drawerLayout.setDrawerListener(drawerToggle);drawerToggle.setDrawerIndicatorEnabled(false);toolbar.setNavigationIcon(R.drawable.toolbar_navigation);/设置那个抽屉图片,主要看美工了,美工要规定那个图片大小,我这里是随便放的toolbar.setNavigationOnClickListener(new View.OnClickListener() Overridepublic void onClick(View v

12、) drawerLayout.openDrawer(Gravity.LEFT););navigationView.setNavigationItemSelectedListener(this);Overridepublic boolean onNavigationItemSelected(MenuItem item) switch (item.getItemId() case R.id.publish:/跳转的 activity 在这里建立/ startActivity(new Intent(this, PublishActivity.class);drawerLayout.closeDraw

13、ers();return true;case R.id.published:/ startActivity(new Intent(this, PublishedActivity.class);drawerLayout.closeDrawers();return true;case R.id.growth:/ startActivity(new Intent(this, GrowthActivity.class);drawerLayout.closeDrawers();break;case R.id.collect:/ startActivity(new Intent(this, Collect

14、ionActivity.class);drawerLayout.closeDrawers();return true;case R.id.setting:/ startActivity(new Intent(this, SettingActivity.class);drawerLayout.closeDrawers();return true;return super.onContextItemSelected(item);所以继承 DrawerActivity 的 MainActivity 的代码就十分的简洁了,而且其他的 activity 也可以继承 ToolbarActivity 从而实

15、现复用了。public class MainActivity extends DrawerActivity private static final int PAGE_LIMIT = 4;/这里是限定预加载的页面个数,不用 Fragment重新去 onCreate。使用这个就是去优化页面,从而 viewpager 去缓存 viewBindView(R.id.tab_layout)TabLayout tabLayout;BindView(R.id.viewpager)NoScrollViewPager viewPager;Overrideprotected int getLayoutId() return R.layout.activity_main;Overrideprotected void initView() Overrideprotected void initEvent() if (Build.VERSION.SDK_INT = Build.VERSION_CODES.M) String packageName = getPackageName();PowerManagerpm=(PowerManager) getSystemService(Context.POWER_SERVICE);if (!pm.isIgnori

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号