goldze / mvvmhabit Goto Github PK
View Code? Open in Web Editor NEW👕基于谷歌最新AAC架构,MVVM设计模式的一套快速开发库,整合Okhttp+RxJava+Retrofit+Glide等主流模块,满足日常开发需求。使用该框架可以快速开发一个高质量、易维护的Android应用。
License: Apache License 2.0
👕基于谷歌最新AAC架构,MVVM设计模式的一套快速开发库,整合Okhttp+RxJava+Retrofit+Glide等主流模块,满足日常开发需求。使用该框架可以快速开发一个高质量、易维护的Android应用。
License: Apache License 2.0
Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'android:onItemClickCommand' with parameter type me.goldze.mvvmhabit.binding.command.BindingCommand<java.lang.String> on android.support.v7.widget.RecyclerView.
file:D:\work\xiantian\GreenBeans\userapp\src\main\res\layout\activity_quick_order.xml
loc:60:50 - 60:84
****\ data binding error ****
例如 https://github.com/y1xian/KotlinMvp
使用起来很方便
默认打开ContainerActivity是没有返回功能的,要怎么定制actionbar呢
09-03 18:02:13.419 4324-4324/com.goldze.mvvmhabit E/CustomActivityOnCrash: App has crashed, executing CustomActivityOnCrash's UncaughtExceptionHandler
java.lang.ExceptionInInitializerError
at com.goldze.mvvmhabit.utils.RetrofitClient$SingletonHolder.access$100(RetrofitClient.java)
at com.goldze.mvvmhabit.utils.RetrofitClient.getInstance(RetrofitClient.java:56)
at com.goldze.mvvmhabit.ui.vm.NetWorkViewModel.requestNetWork(NetWorkViewModel.java:152)
at com.goldze.mvvmhabit.ui.vm.NetWorkViewModel.onCreate(NetWorkViewModel.java:53)
at me.goldze.mvvmhabit.base.BaseFragment.onViewCreated(BaseFragment.java:65)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1430)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at com.trello.rxlifecycle2.components.support.RxAppCompatActivity.onStart(RxAppCompatActivity.java:66)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1244)
at android.app.Activity.performStart(Activity.java:6247)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2678)
at android.app.ActivityThread.access$900(ActivityThread.java:187)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1523)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:210)
at android.app.ActivityThread.main(ActivityThread.java:5809)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)
Caused by: java.lang.IllegalArgumentException: Unexpected char 0x65e5 at 0 in header name: 日志请求头
at okhttp3.Headers$Builder.checkNameAndValue(Headers.java:330)
at okhttp3.Headers$Builder.set(Headers.java:318)
at me.goldze.mvvmhabit.http.interceptor.logging.LoggingInterceptor$Builder.addHeader(LoggingInterceptor.java:153)
at com.goldze.mvvmhabit.utils.RetrofitClient.(RetrofitClient.java:94)
at com.goldze.mvvmhabit.utils.RetrofitClient.(RetrofitClient.java:60)
at com.goldze.mvvmhabit.utils.RetrofitClient.(RetrofitClient.java:35)
at com.goldze.mvvmhabit.utils.RetrofitClient$SingletonHolder.(RetrofitClient.java:52)
at com.goldze.mvvmhabit.utils.RetrofitClient$SingletonHolder.access$100(RetrofitClient.java)
at com.goldze.mvvmhabit.utils.RetrofitClient.getInstance(RetrofitClient.java:56)
at com.goldze.mvvmhabit.ui.vm.NetWorkViewModel.requestNetWork(NetWorkViewModel.java:152)
at com.goldze.mvvmhabit.ui.vm.NetWorkViewModel.onCreate(NetWorkViewModel.java:53)
at me.goldze.mvvmhabit.base.BaseFragment.onViewCreated(BaseFragment.java:65)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1430)
at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)
at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)
at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)
at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
at com.trello.rxlifecycle2.components.support.RxAppCompatActivity.onStart(RxAppCompatActivity.java:66)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1244)
at android.app.Activity.performStart(Activity.java:6247)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2544)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2678)
at android.app.ActivityThread.access$900(ActivityThread.java:187)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1523)
at android.os.Handler.dispatchMessage(Handler.java:111)
at android.os.Looper.loop(Looper.java:210)
at android.app.ActivityThread.main(ActivityThread.java:5809)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1113)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:879)
用了这个框架,include复用布局不知怎么弄了
当使用startContainerActivity多次来跳转ContainerActivity的时候,这时候要跳转到指定的某个fragment,怎么操作,望大神指教。谢谢
您好,分页能可不可以用 Paging library 库来实现啊?我试了半天不知道该如何实现
大神你好!按照你得这种封装思路,那么在Activity和viewmodel中都不再持有view的引用,全部通过观察者的模式把逻辑回调到viewmodel中进行处理,但我现在有一个场景,就是一个dialog,在点击onBackPressed的时候要处理关闭dialog。这个时候这个事件处理是在Activity里面处理还是传递到viewmodel中合适呢? 而且这个时候dialog的对象怎么拿到呢。findviewbyid么。望指教
找了半天没看到,在哪里去掉前面自带的app_name
@Override
public int initVariableId() {
return BR.viewModel
}
这个是什么 viewmodel 找不到啊
请问下,有关于
me.tatarka.bindingcollectionadapter2:bindingcollectionadapter:2.2.0
me.tatarka.bindingcollectionadapter2:bindingcollectionadapter-recyclerview:2.2.0
这个版本的学习资料或者链接吗?
想了解下和旧版本有什么区别,我用activity 显示列表 直接编译不过去
测试发现ViewModel的onDestroy没有回调,比如关闭页面,DetailViewModel的onDestroy没有回调,其他生命周期方法回调了。
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
> android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'binding:itemView' with parameter type me.tatarka.bindingcollectionadapter.ItemViewSelector<com.goldze.mvvmhabit.ui.vm.NetWorkItemViewModel> on android.support.v7.widget.RecyclerView.
file:C:\Users\Administrator\Desktop\github\MVVMHabit\app\src\main\res\layout\fragment_network.xml
loc:33:36 - 33:53
****\ data binding error ****
ExceptionHandle 这个类咋用用
大神
欢迎大家在群里交流安卓技术,共同打造全网最优Android MVVM模式开发方案
android:onClick这个方法没事
但是 binding:onClickCommand老是报错
<!-- binding:onClickCommand="@{viewModel.loginOnClickCommand}"-->
<TextView
binding:onClickCommand="@{viewModel.loginOnClickCommand}"
android:gravity="center"
android:padding="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
/>
Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'binding:onClickCommand' with parameter type me.goldze.mvvmhabit.binding.command.BindingCommand on android.widget.TextView.
file:E:\MyApplication\app\src\main\res\layout\activity_main.xml
loc:17:34 - 17:62
****\ data binding error ****
网络缓存支持post?
能增加对接MultiType 的recyeclerview例子吗,包括点击不同item的点击处理,最好列表外面能加个smartrefreshlayout
需要在接口请求后统一处理返回结果,如统一更新返回结果中的token,无意中发现这个类,请教下使用方法
官方https://developer.android.google.cn/topic/libraries/architecture/viewmodel
Caution: A ViewModel must never reference a view, Lifecycle, or any class that may hold a reference to the activity context.
而在这里viewmodel持有了activity context,不会有问题吗?
这个效果图有时看的见,代码也没动,后来就看不见了,用的就是demo的界面一模一样啊
android studio对databinding的支持不够,硬伤
recycleview复杂一些那真的是头痛啊
viewmodel和View逻辑分离,数据驱动界面更新,看起来很美好,可是用下去你就会发现真正项目中是不能这样的
我现在使用的这个框架,另外使用mvp模式,相当于mvp+mvvm,但是现在欲仙欲死,有没有同道中人,打算老老实实的用mvp写了,databinding只用于界面绑定,可能mvvm现在还不够成熟吧
Error:Execution failed for task ':app:compileDebugJavaWithJavac'.
android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Cannot find the setter for attribute 'binding:itemView' with parameter type me.tatarka.bindingcollectionadapter.ItemViewSelector<com.goldze.mvvmhabit.ui.vm.NetWorkItemViewModel> on android.support.v7.widget.RecyclerView.
file:E:\workspace\workspace_android\studio\MVVMHabit\app\src\main\res\layout\fragment_network.xml
loc:33:36 - 33:53
****\ data binding error ****
直接跑,没任何改动...用的gradle4.1
例如:
public SingleLiveEvent<String> getShowDialogEvent() {
return showDialogEvent = createLiveData(showDialogEvent);
}
如果想对BaseActivity进行扩展,例如添加一些通用的title,状态页,该怎么做?initContentView只能返回一个View,initViewDataBinding也无法复写
如果您在使用中发现存在Bug,请在此提出,感谢您的反馈!
demo里的model.demoGet() 这个 还有addSubscribe()这个都是什么意思 他们3个都一样的意思吗
已经start,
大神,首先要感谢你,你写的项目给我带来很大的帮助,你是我在github中找到的项目中写的最好的一个,如果Demo能在详细点就好了,对我们这些初学者会带来很大的帮助。
请教博主:
1.如果RecyclerView如果绑定的item是多种样式的怎么使用ItemBinding 模式在xml进行itemBinding呢。这里默认的itemBinding都是传一个R.layout.xx的布局进去,那多个布局样式的呢?
2.怎么支持扩展呢,比如MD的BottomNavigationView控件怎么封装在xml直接使用binding的方式绑定数据呢,而且有可能是服务器返回的动态tab的绑定信息
跪求博主回复,现在对databinding还是小白。但是很希望把这个框架用起来
Build version: 1.3.8
Build date: 1979-11-30 00:00:00
Current date: 2019-01-23 04:27:48
Device: Genymotion Google Nexus 5X - 7.0.0 - API 24 - 1080x1920
Stack trace:
java.lang.NoSuchMethodError: No virtual method getLifecycle()Landroid/arch/lifecycle/Lifecycle; in class Lme/goldze/mvvmhabit/base/BaseActivity; or its super classes (declaration of 'me.goldze.mvvmhabit.base.BaseActivity' appears in /data/app/com.xxx.xx-1/split_lib_slice_5_apk.apk)
at me.goldze.mvvmhabit.base.BaseActivity.initViewDataBinding(BaseActivity.java:87)
at me.goldze.mvvmhabit.base.BaseActivity.onCreate(BaseActivity.java:42)
at android.app.Activity.performCreate(Activity.java:6664)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
由于在后续版本中,会逐步放弃对support 的升级和维护,所以,我们必须迁移到 androidX,这个库我尝试迁移,但是一直有问题
h: App has crashed, executing CustomActivityOnCrash's UncaughtExceptionHandler rx.exceptions.OnErrorNotImplementedException: For input string: "a" at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:386) at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:383) at rx.internal.util.ActionSubscriber.onError(ActionSubscriber.java:44) at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:153) at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:115) at rx.exceptions.Exceptions.throwOrReport(Exceptions.java:212) at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:139) at rx.internal.operators.OperatorThrottleFirst$1.onNext(OperatorThrottleFirst.java:53) at com.jakewharton.rxbinding.view.ViewClickOnSubscribe$1.onClick(ViewClickOnSubscribe.java:23) at android.view.View.performClick(View.java:5640) at android.view.View$PerformClick.run(View.java:22455) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6196) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) Caused by: java.lang.NumberFormatException: For input string: "a" at java.lang.Integer.parseInt(Integer.java:521) at java.lang.Integer.parseInt(Integer.java:556) at com.goldze.mvvmhabit.ui.vm.DemoViewModel$5.call(DemoViewModel.java:93) at me.goldze.mvvmhabit.binding.command.BindingCommand.execute(BindingCommand.java:51) at me.goldze.mvvmhabit.binding.viewadapter.view.ViewAdapter$2.call(ViewAdapter.java:47) at me.goldze.mvvmhabit.binding.viewadapter.view.ViewAdapter$2.call(ViewAdapter.java:43) at rx.internal.util.ActionSubscriber.onNext(ActionSubscriber.java:39) at rx.observers.SafeSubscriber.onNext(SafeSubscriber.java:134) at rx.internal.operators.OperatorThrottleFirst$1.onNext(OperatorThrottleFirst.java:53) at com.jakewharton.rxbinding.view.ViewClickOnSubscribe$1.onClick(ViewClickOnSubscribe.java:23) at android.view.View.performClick(View.java:5640) at android.view.View$PerformClick.run(View.java:22455) at android.os.Handler.handleCallback(Handler.java:751) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:154) at android.app.ActivityThread.main(ActivityThread.java:6196) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
大神你写的太好了,我经过一段时间的编写,发现你封装很细,完全可以用到项目上
按照2.2.4、RecyclerView绑定后,数据刷新,RecyclerView整体闪烁
CustomActivityOnCrash: App has crashed, executing CustomActivityOnCrash's UncaughtExceptionHandler
java.lang.NoSuchMethodError: No static method getFont(Landroid/content/Context;ILandroid/util/TypedValue;ILandroid/widget/TextView;)Landroid/graphics/Typeface; in class Landroid/support/v4/content/res/ResourcesCompat; or its super classes (declaration of 'android.support.v4.content.res.ResourcesCompat' appears in /data/app/com.goldze.mvvmhabit-1/split_lib_dependencies_apk.apk)
at android.support.v7.widget.TintTypedArray.getFont(TintTypedArray.java:119)
at android.support.v7.widget.AppCompatTextHelper.updateTypefaceAndStyle(AppCompatTextHelper.java:208)
at android.support.v7.widget.AppCompatTextHelper.loadFromAttributes(AppCompatTextHelper.java:110)
at android.support.v7.widget.AppCompatTextHelperV17.loadFromAttributes(AppCompatTextHelperV17.java:38)
at android.support.v7.widget.AppCompatTextView.(AppCompatTextView.java:81)
at android.support.v7.widget.AppCompatTextView.(AppCompatTextView.java:71)
at android.support.v7.widget.AppCompatTextView.(AppCompatTextView.java:67)
at android.support.v7.widget.Toolbar.setTitle(Toolbar.java:753)
at android.support.v7.widget.ToolbarWidgetWrapper.setTitleInt(ToolbarWidgetWrapper.java:261)
at android.support.v7.widget.ToolbarWidgetWrapper.setWindowTitle(ToolbarWidgetWrapper.java:243)
at android.support.v7.widget.ActionBarOverlayLayout.setWindowTitle(ActionBarOverlayLayout.java:621)
at android.support.v7.app.AppCompatDelegateImplV9.onTitleChanged(AppCompatDelegateImplV9.java:631)
at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:328)
at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:276)
at android.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:261)
at me.goldze.mvvmhabit.base.BaseActivity.initViewDataBinding(BaseActivity.java:54)
at me.goldze.mvvmhabit.base.BaseActivity.onCreate(BaseActivity.java:29)
at android.app.Activity.performCreate(Activity.java:6679)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
at android.app.ActivityThread.-wrap12(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
持续关注中 .
例如使用:https://github.com/jakubkinst/Android-StatefulLayout
statefulLayout.setStateView(STATE_NO_PERSMISSION, LayoutInflater.from(this).inflate(R.layout.state_no_permission, null));
statefulLayout.setStateView(STATE_PROGRESS, LayoutInflater.from(this).inflate(R.layout.state_progress, null));
如果我使用mvvm来写,我应该怎么写好
SubmitTransitionButton一个view控件,有onSuccess()和onFailure()这两个方法(xml是没有属性可以调用这两个方法。只能在代码里面调用).
请问如果我用mvvmHabit 我要怎么控制,可以写个例子吗,还有怎么获取获取页面的view 例如 binding.mainTv1.setText();
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.