博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通用组件示例
阅读量:5897 次
发布时间:2019-06-19

本文共 6558 字,大约阅读时间需要 21 分钟。

实现一个需求很容易,难的是代码的框架,我们应该让它后期的维护变得简单

titlebar

base初始化private void initBar(TitleBar titleBar) {    StatusBarManager.translucentStatusBar(this, titleBar);    // set the default click listener    titleBar.setLeftClickListener(new View.OnClickListener() {        @Override        public void onClick(View v) {            onBackPressed();        }    });    titleBar.setLeftImageResource(R.drawable.img_black_back);    titleBar.setTitleColor(Color.WHITE);    //默认给一个白色的背景    titleBar.setBackgroundColor(Color.WHITE);    titleBar.setSubTitleColor(Color.WHITE);    titleBar.setDividerColor(Color.GRAY);    titleBar.setActionTextColor(Color.WHITE);    titleBar.setDividerHeight(0);}

沉浸式

  • 支持版本碎片化
  • dark模式和fragment之前的dark模式切换,这是自动的(在父类调度)
  • MIUI FLYME等深度定制系统,版本查询和定制话代码需要到官网查询

dark模式自动切换的原理

  • 取色器bitmap-palette
  • pix像素点色值
  • 复写titlebar#setbackground()

loadingHelper

Activity/Fragment中使用

private void updateCityInfo(Cities.City city) {        mCity = city;        getTitleBar().setLeftText(city.name);        //发起网络加载中         getLoadingHelper().showLoadingView();        ViewModelProviders.of(this).get(HomeModuleViewModule.class)                .loadHomeModule();    } getLoadingHelper().addRetryListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                    //网络错误添加action                getLoadingHelper().showLoadingView();                ViewModelProviders.of(HomeTabFragment.this).get(HomeModuleViewModule.class).loadHomeModule();            }        }); ViewModelProviders.of(this).get(HomeModuleViewModule.class).getHomeModule()                .observe(this, new Observer
() { @Override public void onChanged(@Nullable HomeModule homeModule) { if (homeModule == null) { //网络回调后错误 getLoadingHelper().showNetworkError(); } else { //网络回调后成功 getLoadingHelper().showContentView(); updateHomeViews(layout_ll_content, homeModule); if (PUSH_TYPE_REPORT_FROM_HOME) { PUSH_TYPE_REPORT_FROM_HOME = false; CreditServiceHelper .doHomeNextJumpFor(getActivity(), mHeaderView); } } } });

ViewModel和View-Layout应用

ViewModelProviders.of(this).get(CreditCardViewModel.class).getLiveData()                .observe(this, new Observer
() { @Override public void onChanged(@Nullable CreditlistV102 creditlistV102) { if (creditlistV102 != null) { getLoadingHelper().showContentView(); buildViews(creditlistV102); } else { getLoadingHelper().showNetworkError(); } } });ViewModelProviders.of(this).get(CreditCardViewModel.class).load();getLoadingHelper().showLoadingView();public void buildViews(CreditlistV102 creditlistV102) { buildBanksView(creditlistV102.bankList); buildMidTitleView(creditlistV102.cardTitle); buildViewPagers(creditlistV102.tag_list);}private void buildBanksView(List
bankList) { llHeader.addView(new GridHeadView(getContext(), bankList));}//分割的view@BindLayout(R.layout.credit_card_headerview)static class GridHeadView extends BaseItemViewWithBean
> { @BindView(R.id.grid_view) NoScrollGridView gridView; @BindView(R.id.icon_bank_bottom) View iconBankBottom; @BindView(R.id.ll_spilt) LinearLayout llSpilt; boolean mIsExpend; public GridHeadView(Context context, List
data) { super(context, data); } @Override protected void onViewCreated(View view, final List
bean) { final GridHeadAdapter adapter = new GridHeadAdapter(getContext()); gridView.setAdapter(adapter); }}//adapterstatic class GridHeadAdapter extends BaseListAdapter
{ public GridHeadAdapter(Context context) { super(context); } @Override protected void onBindViewHolder(List
>> viewHolderList) { viewHolderList.add(ViewHolder.class); }//ViewHolder @BindLayout(R.layout.viewholder_card_view_header_banks) static class ViewHolder extends BaseViewHolder
{ @BindView(R.id.img_top) ImageView imgTop; @BindView(R.id.tv_name) TextView tvName; @Override protected void bindView(final CreditlistV102.BankListBean bean, int position, final Context context) { ImageLoader.host(context).load(bean.image, imgTop); tvName.setText(bean.name); imgTop.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { CreditBankDetailActivity.invoke(context, bean.id); } }); } }} private void buildViewPagers(List
cardList) { viewPager.setAdapter(new CreditCardViewPagerAdapter(getChildFragmentManager(), cardList)); viewPager.setOffscreenPageLimit(cardList.size() - 1); tabLayout.setupWithViewPager(viewPager); UIUtil.reflex(tabLayout, 20); }

RxBus

tag

tags
Model
等可以自定义多个纬度

Action 事件源tagpublic interface RxBusAction {    String MAIN_HOME_REFRESH = "main_home_refresh";    String ON_APP_LOGOUT = "on_app_logout";    String ON_APP_LOGIN = "on_app_login";    String ON_CITY_CHANGED = "on_city_changed";}消息体public class RxBusMsg
implements Serializable { public String tag; public T value; /** * @param value 当value为空时必须传入泛型的类型 */ public RxBusMsg(@NonNull T value) { this.value = value; } public RxBusMsg
obtainMsg(String msg) { return new RxBusMsg<>(msg); }}响应体注解@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.METHOD)public @interface Subscribe { Tag[] tags() default {}; String tag() default ""; EventThread thread() default EventThread.MAIN_THREAD;}

网络库

public interface ApiBus {    /**     * 首页     *     * @return     */    @Url(BASIC_URL + "index/indexv100")    Single
loadHome(); /** * App启动接口 * * @param newUserOpen * * @return */ @Url(BASIC_URL + "config/StartV100") Single
appStart(@Field("new_user_open") String newUserOpen); /** * 请求同步数据 * * @return */ @Security(PRIVATE_CRYPT) @Url(BASIC_URL + "account/SyncV100") Single
LOGIN_SYNC();}获得rx被观察者的对象 JtRetrofit.create(ApiBus.class).loadHome();见VM模式

转载地址:http://aaasx.baihongyu.com/

你可能感兴趣的文章
(原创)拨开迷雾见月明-剖析asio中的proactor模式(一)
查看>>
Accounting_权责发生制和收付实现值的区别(概念)
查看>>
数学图形(2.16)三维螺线
查看>>
02 Architecture Overview
查看>>
[Oracle] 11G自己主动收集统计信息
查看>>
分享一个快速的Json(反)序列化开源项目 Jil
查看>>
騰訊RTX的API開發,給RTX開個天窗
查看>>
NGUI Clip Animation (UI动画)
查看>>
纯CSS3编写的面包屑导航收集
查看>>
uva208 - Firetruck
查看>>
关于缺省路由传递问题的探讨(上)[ip default-network、ip default-gateway等]
查看>>
矩阵乘法 --- hdu 4920 : Matrix multiplication
查看>>
FireFly 服务端 Unity3D黑暗世界 客户端 问题
查看>>
opencv-----基本数据类型
查看>>
css隔行换色
查看>>
contenteditable 属性
查看>>
网络编程学习小结
查看>>
【BZOJ】1639: [Usaco2007 Mar]Monthly Expense 月度开支(二分)
查看>>
怎样提高团队管理能力3
查看>>
网站流量分析指标-PV/UV/PR/IP
查看>>