技术控

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

[其他] mvc-android

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

立即注册CoLaBug.com会员,免费获得投稿人的专业资料,享用更多功能,玩转个人品牌!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
MVC-Android

  A pure MVC base library on android . Using it , your code can be very clean in MVC pattern .
   
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-2 (android,library,public,return)

  Controller(Activity/Fragment)

  [code]public class StartActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);
        model = new StartModel(new StartView(this));
        model.onCreate();
    }

    public RecyclerAdapter getAdapter() {
        return model.getAdapter();
    }

    public void fetchItems(){
        model.fetchItems();
    }

    public void loadMoreItems(){
        model.loadMoreItems();
    }

    @Override
    public void onUserInteraction() {
        super.onUserInteraction();
        model.onUserInteraction();
    }

    @Override
    public void onBackPressed() {
        if (!model.onBackPressed()) {
            super.onBackPressed();
        }
    }
}[/code]  Model

  [code]public class StartModel extends ActivityModel {

    private RecyclerAdapter adapter;

    public StartModel(StartView view) {
        super(view);
        adapter = new RecyclerAdapter(view.getController(), R.layout.item) {
            @Override
            protected void convert(RecyclerAdapterHelper helper, Item item) {
                helper.setText(R.id.txt_name, item.getName());
            }
        };
    }

    @Override
    public void onCreate() {
        /** Override it when you have special stuff to deal with */
        super.onCreate();
    }
    public RecyclerAdapter getAdapter() {
        return adapter;
    }

    public void onUserInteraction() {
        view.onUserInteraction();
    }

    public boolean onBackPressed() {
        return view.onBackPressed();
    }


    public void loadMoreItems() {
        Observable.just(6)
                .compose(view.getController().bindUntilEvent(ActivityEvent.DESTROY))
                .subscribeOn(Schedulers.io())
                .map(new Func1>() {
                    @Override
                    public List call(Integer integer) {
                        List items = new ArrayList();
                        int count = adapter.getSize();
                        for (int i = 0; i < integer; i++) {
                            Item item = new Item("This is the " + (count + i) + "th item");
                            items.add(item);
                        }
                        return items;
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1>() {
                    @Override
                    public void call(List items) {
                        adapter.addAll(items);
                        view.setRefreshing(false);
                    }
                });
    }

    public void fetchItems() {
        Observable.just(4)
                .compose(view.getController().bindUntilEvent(ActivityEvent.DESTROY))
                .subscribeOn(Schedulers.io())
                .map(new Func1>() {
                    @Override
                    public List call(Integer integer) {
                        List items = new ArrayList();
                        for (int i = 0; i < integer; i++) {
                            Item item = new Item("This is the " + i + "th item");
                            items.add(item);
                        }
                        return items;
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Action1>() {
                    @Override
                    public void call(List items) {
                        adapter.replaceAll(items);
                    }
                });

    }
}[/code]  View

  [code]public class StartView extends ActivityView {

    // Also , you can use ButterKnife
    [email protected](R.id.toolbar) Toolbar toolbar
    private Toolbar toolbar;
    private RecyclerView recyclerView;
    private SwipeRefreshLayout swipeRefreshLayout;

    private final int NONE_BACK_VALUE = 6;
    private final int SUPPORT_BACK_VALUE = 4;
    private final int MIDDLE_BACK_VALUE = 2;
    private final int PRIMARY_BACK_VALUE = 0;
    private boolean supportBack = false;
    private int pressedBackCount = PRIMARY_BACK_VALUE;

    public StartView(StartActivity activity) {
        super(activity);
        //ButterKnife.bind(this,activity);
    }

    @Override
    protected void findView() {
        toolbar = retrieveView(R.id.toolbar);
        toolbar.setNavigationIcon(R.drawable.ic_arrow_back);
        toolbar.setTitle(R.string.app_title);

        activity.setSupportActionBar(toolbar);
        recyclerView = retrieveView(R.id.rv_item);
        swipeRefreshLayout = retrieveView(R.id.srl);
        recyclerView.setLayoutManager(new LinearLayoutManager(activity));
        recyclerView.addItemDecoration(new HorizontalItemDecoration.Builder(activity)
                .color(R.color.accent)
                .size(1)
                .showLastDivider()
                .build());
    }

    @Override
    protected void setListener() {
        toolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                activity.finish();
            }
        });

        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                activity.loadMoreItems();
            }
        });
    }

    @Override
    protected void setAdapter() {
        recyclerView.setAdapter(activity.getAdapter());
    }

    @Override
    protected void initialize() {
        activity.fetchItems();
    }

    public void setRefreshing(final boolean refreshing) {
        swipeRefreshLayout.post(new Runnable() {
            @Override
            public void run() {
                swipeRefreshLayout.setRefreshing(refreshing);
            }
        });
    }

    public void onUserInteraction() {
        if (supportBack) {
            supportBack = false;
        }
        if (pressedBackCount < NONE_BACK_VALUE) {
            pressedBackCount++;
        }
    }

    public boolean onBackPressed() {
        if (!supportBack && pressedBackCount != SUPPORT_BACK_VALUE) {
            supportBack = true;
            pressedBackCount = MIDDLE_BACK_VALUE;
            Snackbar.make(toolbar, R.string.snack_close, Snackbar.LENGTH_SHORT)
                    .setAction(R.string.close, new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {

                        }
                    }).show();
            return true;
        }
        return false;
    }

    @Override
    public void onClick(View v) {

    }
}[/code]  Maven

  [code]compile 'com.github.thepacific:mvc:{lastest version}'[/code]  Dependencies

  [code]compile 'com.android.support:appcompat-v7:24.2.1'
compile 'io.reactivex:rxjava:1.2.1'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.trello:rxlifecycle:0.8.0'
compile 'com.trello:rxlifecycle-components:0.8.0'[/code]
友荐云推荐




上一篇:H5直播起航
下一篇:让脚本说话"厉害了我的哥"
酷辣虫提示酷辣虫禁止发表任何与中华人民共和国法律有抵触的内容!所有内容由用户发布,并不代表酷辣虫的观点,酷辣虫无法对用户发布内容真实性提供任何的保证,请自行验证并承担风险与后果。如您有版权、违规等问题,请通过"联系我们"或"违规举报"告知我们处理。

莲傲 发表于 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
很给力!
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

我要投稿

推荐阅读

扫码访问 @iTTTTT瑞翔 的微博
回页顶回复上一篇下一篇回列表手机版
手机版/CoLaBug.com ( 粤ICP备05003221号 | 文网文[2010]257号 )|网站地图 酷辣虫

© 2001-2016 Comsenz Inc. Design: Dean. DiscuzFans.

返回顶部 返回列表