请选择 进入手机版 | 继续访问电脑版

技术控

    今日:87| 主题:61781
收藏本版 (1)
最新软件应用技术尽在掌握

[其他] mvc-android

[复制链接]
娓娓动听句句刺心 发表于 2016-10-10 10:01:46
270 6
MVC-Android

  A pure MVC base library on android . Using it , your code can be very clean in MVC pattern .
   

mvc-android

mvc-android-1-技术控-android,library,public,return

  Features

  
       
  • Activity and Fragment as controllers   
  • Make MVC pattern more clean  
  Example

   This sample has a RecyclerView,Toolbar and SwipRefreshLayout

mvc-android

mvc-android-2-技术控-android,library,public,return

  Controller(Activity/Fragment)

  1. public class StartActivity extends Activity<StartModel> {
  2.     @Override
  3.     protected void onCreate(Bundle savedInstanceState) {
  4.         super.onCreate(savedInstanceState);
  5.         setContentView(R.layout.activity_start);
  6.         model = new StartModel(new StartView(this));
  7.         model.onCreate();
  8.     }
  9.     public RecyclerAdapter<Item> getAdapter() {
  10.         return model.getAdapter();
  11.     }
  12.     public void fetchItems(){
  13.         model.fetchItems();
  14.     }
  15.     public void loadMoreItems(){
  16.         model.loadMoreItems();
  17.     }
  18.     @Override
  19.     public void onUserInteraction() {
  20.         super.onUserInteraction();
  21.         model.onUserInteraction();
  22.     }
  23.     @Override
  24.     public void onBackPressed() {
  25.         if (!model.onBackPressed()) {
  26.             super.onBackPressed();
  27.         }
  28.     }
  29. }
复制代码
Model

  1. public class StartModel extends ActivityModel<StartView> {
  2.     private RecyclerAdapter<Item> adapter;
  3.     public StartModel(StartView view) {
  4.         super(view);
  5.         adapter = new RecyclerAdapter<Item>(view.getController(), R.layout.item) {
  6.             @Override
  7.             protected void convert(RecyclerAdapterHelper helper, Item item) {
  8.                 helper.setText(R.id.txt_name, item.getName());
  9.             }
  10.         };
  11.     }
  12.     @Override
  13.     public void onCreate() {
  14.         /** Override it when you have special stuff to deal with */
  15.         super.onCreate();
  16.     }
  17.     public RecyclerAdapter<Item> getAdapter() {
  18.         return adapter;
  19.     }
  20.     public void onUserInteraction() {
  21.         view.onUserInteraction();
  22.     }
  23.     public boolean onBackPressed() {
  24.         return view.onBackPressed();
  25.     }
  26.     public void loadMoreItems() {
  27.         Observable.just(6)
  28.                 .compose(view.getController().<Integer>bindUntilEvent(ActivityEvent.DESTROY))
  29.                 .subscribeOn(Schedulers.io())
  30.                 .map(new Func1<Integer, List<Item>>() {
  31.                     @Override
  32.                     public List<Item> call(Integer integer) {
  33.                         List<Item> items = new ArrayList();
  34.                         int count = adapter.getSize();
  35.                         for (int i = 0; i < integer; i++) {
  36.                             Item item = new Item("This is the " + (count + i) + "th item");
  37.                             items.add(item);
  38.                         }
  39.                         return items;
  40.                     }
  41.                 })
  42.                 .observeOn(AndroidSchedulers.mainThread())
  43.                 .subscribe(new Action1<List<Item>>() {
  44.                     @Override
  45.                     public void call(List<Item> items) {
  46.                         adapter.addAll(items);
  47.                         view.setRefreshing(false);
  48.                     }
  49.                 });
  50.     }
  51.     public void fetchItems() {
  52.         Observable.just(4)
  53.                 .compose(view.getController().<Integer>bindUntilEvent(ActivityEvent.DESTROY))
  54.                 .subscribeOn(Schedulers.io())
  55.                 .map(new Func1<Integer, List<Item>>() {
  56.                     @Override
  57.                     public List<Item> call(Integer integer) {
  58.                         List<Item> items = new ArrayList();
  59.                         for (int i = 0; i < integer; i++) {
  60.                             Item item = new Item("This is the " + i + "th item");
  61.                             items.add(item);
  62.                         }
  63.                         return items;
  64.                     }
  65.                 })
  66.                 .observeOn(AndroidSchedulers.mainThread())
  67.                 .subscribe(new Action1<List<Item>>() {
  68.                     @Override
  69.                     public void call(List<Item> items) {
  70.                         adapter.replaceAll(items);
  71.                     }
  72.                 });
  73.     }
  74. }
复制代码
View

  1. public class StartView extends ActivityView<StartActivity> {
  2.     // Also , you can use ButterKnife
  3.     [email protected](R.id.toolbar) Toolbar toolbar
  4.     private Toolbar toolbar;
  5.     private RecyclerView recyclerView;
  6.     private SwipeRefreshLayout swipeRefreshLayout;
  7.     private final int NONE_BACK_VALUE = 6;
  8.     private final int SUPPORT_BACK_VALUE = 4;
  9.     private final int MIDDLE_BACK_VALUE = 2;
  10.     private final int PRIMARY_BACK_VALUE = 0;
  11.     private boolean supportBack = false;
  12.     private int pressedBackCount = PRIMARY_BACK_VALUE;
  13.     public StartView(StartActivity activity) {
  14.         super(activity);
  15.         //ButterKnife.bind(this,activity);
  16.     }
  17.     @Override
  18.     protected void findView() {
  19.         toolbar = retrieveView(R.id.toolbar);
  20.         toolbar.setNavigationIcon(R.drawable.ic_arrow_back);
  21.         toolbar.setTitle(R.string.app_title);
  22.         activity.setSupportActionBar(toolbar);
  23.         recyclerView = retrieveView(R.id.rv_item);
  24.         swipeRefreshLayout = retrieveView(R.id.srl);
  25.         recyclerView.setLayoutManager(new LinearLayoutManager(activity));
  26.         recyclerView.addItemDecoration(new HorizontalItemDecoration.Builder(activity)
  27.                 .color(R.color.accent)
  28.                 .size(1)
  29.                 .showLastDivider()
  30.                 .build());
  31.     }
  32.     @Override
  33.     protected void setListener() {
  34.         toolbar.setNavigationOnClickListener(new View.OnClickListener() {
  35.             @Override
  36.             public void onClick(View v) {
  37.                 activity.finish();
  38.             }
  39.         });
  40.         swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
  41.             @Override
  42.             public void onRefresh() {
  43.                 activity.loadMoreItems();
  44.             }
  45.         });
  46.     }
  47.     @Override
  48.     protected void setAdapter() {
  49.         recyclerView.setAdapter(activity.getAdapter());
  50.     }
  51.     @Override
  52.     protected void initialize() {
  53.         activity.fetchItems();
  54.     }
  55.     public void setRefreshing(final boolean refreshing) {
  56.         swipeRefreshLayout.post(new Runnable() {
  57.             @Override
  58.             public void run() {
  59.                 swipeRefreshLayout.setRefreshing(refreshing);
  60.             }
  61.         });
  62.     }
  63.     public void onUserInteraction() {
  64.         if (supportBack) {
  65.             supportBack = false;
  66.         }
  67.         if (pressedBackCount < NONE_BACK_VALUE) {
  68.             pressedBackCount++;
  69.         }
  70.     }
  71.     public boolean onBackPressed() {
  72.         if (!supportBack && pressedBackCount != SUPPORT_BACK_VALUE) {
  73.             supportBack = true;
  74.             pressedBackCount = MIDDLE_BACK_VALUE;
  75.             Snackbar.make(toolbar, R.string.snack_close, Snackbar.LENGTH_SHORT)
  76.                     .setAction(R.string.close, new View.OnClickListener() {
  77.                         @Override
  78.                         public void onClick(View v) {
  79.                         }
  80.                     }).show();
  81.             return true;
  82.         }
  83.         return false;
  84.     }
  85.     @Override
  86.     public void onClick(View v) {
  87.     }
  88. }
复制代码
Maven

  1. compile 'com.github.thepacific:mvc:{lastest version}'
复制代码
Dependencies

  1. compile 'com.android.support:appcompat-v7:24.2.1'
  2. compile 'io.reactivex:rxjava:1.2.1'
  3. compile 'io.reactivex:rxandroid:1.2.1'
  4. compile 'com.trello:rxlifecycle:0.8.0'
  5. compile 'com.trello:rxlifecycle-components:0.8.0'
复制代码
莲傲 发表于 2016-10-21 18:18:43
这么好的贴,家里人知道吗
回复 支持 反对

使用道具 举报

迷恋你的眼 发表于 2016-11-11 13:32:23
友情提示:由于此用户的签名太过于个性而被系统自动屏蔽
回复 支持 反对

使用道具 举报

代钰航 发表于 2016-11-16 08:25:20
吾在之时,首页之贴吾必全挽。吾走之时,只有无尽膜拜本尊之声。
回复 支持 反对

使用道具 举报

杜雨寒 发表于 2016-11-17 15:52:46
哥不说话,笑着路过!
回复 支持 反对

使用道具 举报

snkteko 发表于 2016-11-19 13:43:16
泥泞路上的奔驰,永远跑不过高速路上的夏利。说明:”平台很重要!”
回复 支持 反对

使用道具 举报

lalisaa88 发表于 2016-11-21 15:44:42
很给力!
回复 支持 反对

使用道具 举报

我要投稿

推荐阅读


回页顶回复上一篇下一篇回列表
手机版/c.CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 | 粤公网安备 44010402000842号 )

© 2001-2017 Comsenz Inc.

返回顶部 返回列表