是否可以重新定义库的数据绑定资源?

时间:2016-05-13 15:00:44

标签: android android-layout layout-inflater android-databinding

我正在开发一个使用数据绑定来处理Layout的{​​{1}}中的属性的库(我不会发展,因为它与此问题无关)。

由于应用程序应该能够指定自己的布局,我正在尝试利用resource prioritization mechanism

  

在应用程序和服务器中定义资源ID的情况下   库,工具确保在中声明的资源   应用程序获取优先级,并且库模块中的资源   未编译到应用程序Views中。这给了你   应用灵活性来使用或重新定义任何资源   任何库中定义的行为或值。

只要应用程序的布局包含与库的完全一样多的视图,这样就可以正常工作。但是,当我向应用程序的布局添加更多视图时,在运行时夸大布局时会发生以下异常:

apk

似乎由于库的布局只有1个项目,生成的绑定存储在length = 1的数组中,然后在索引2处访问,因为应用程序的布局有2个项目。但是如果优先级在编译时完成,那么不应该使用应用程序的布局生成绑定吗?

同样,当应用程序的布局具有视图而不是库时,我会在给布局膨胀时遇到此异常:

E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.plnech.example, PID: 31773
java.lang.ArrayIndexOutOfBoundsException: length=2; index=2
at android.databinding.ViewDataBinding.mapBindings(ViewDataBinding.java:938)
at android.databinding.ViewDataBinding.mapBindings(ViewDataBinding.java:995)
at android.databinding.ViewDataBinding.mapBindings(ViewDataBinding.java:568)
at com.plnech.library.databinding.HitsItemBinding.<init>(HitsItemBinding.java:23)
at com.plnech.library.databinding.HitsItemBinding.bind(HitsItemBinding.java:102)
at android.databinding.DataBinderMapper.getDataBinder(DataBinderMapper.java:11)
at android.databinding.DataBindingUtil.bind(DataBindingUtil.java:185)
at android.databinding.DataBindingUtil.inflate(DataBindingUtil.java:120)
at android.databinding.DataBindingUtil.inflate(DataBindingUtil.java:88)
at com.plnech.library.helper.databinding.ResultsAdapter.onCreateViewHolder(ResultsAdapter.java:36)
at com.plnech.library.helper.databinding.ResultsAdapter.onCreateViewHolder(ResultsAdapter.java:21)
at android.support.v7.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:5482)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4707)
at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:4617)
at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:1994)
at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1390)
at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1353)
at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:574)
at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3028)
at android.support.v7.widget.RecyclerView.onMeasure(RecyclerView.java:2625)
at android.view.View.measure(View.java:18788)
at android.widget.RelativeLayout.measureChild(RelativeLayout.java:676)
at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:479)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.support.v7.widget.ContentFrameLayout.onMeasure(ContentFrameLayout.java:135)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.support.v7.widget.ActionBarOverlayLayout.onMeasure(ActionBarOverlayLayout.java:391)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1465)
at android.widget.LinearLayout.measureVertical(LinearLayout.java:748)
at android.widget.LinearLayout.onMeasure(LinearLayout.java:630)
at android.view.View.measure(View.java:18788)
at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5951)
at android.widget.FrameLayout.onMeasure(FrameLayout.java:194)
at com.android.internal.policy.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2643)
at android.view.View.measure(View.java:18788)
at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2100)
at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1216)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1452)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1107)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6013)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
at android.view.Choreographer.doCallbacks(Choreographer.java:670)
at android.view.Choreographer.doFrame(Choreographer.java:606)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
    at android.os.Handler.handleCallback

有没有办法使用数据绑定并仍允许应用程序使用不同的视图量重新定义绑定资源?

0 个答案:

没有答案