视图中的Android - 视图标签不正确:null(CursorAdapter和DataBinding) [英] Android - view tag isn't correct on view:null (CursorAdapter and DataBinding)
问题描述
所以昨天我终于找到了一些尝试新的DataBinding库的时间。我试图使用它与CursorAdapter,但没有成功。
So yesterday I have finally found some time to try new DataBinding library. I have tried to use it with CursorAdapter but with no success.
由于Androidguys写在他们的页面上:
As Androidguys written on their page:
如果您在ListView或RecyclerView
适配器中使用数据绑定项,您可能更喜欢使用:
If you are using data binding items inside a ListView or RecyclerView adapter, you may prefer to use:
ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false);
//or
ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
但是在CursorAdapter中,我必须将Inflating和Binding分为2种方法。那么如何正确实现呢?大多数情况下我得到一个异常:视图标签在视图上是不正确的:null
But in CursorAdapter I have to separate Inflating and Binding into 2 methods. So How correctly implement it? Mostly I got an Exception: view tag isn't correct on view:null
private class BookCursorAdapter extends CursorAdapter {
public BookCursorAdapter(Context context) {
super(context, null, 0);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
BookListItemBinding binding = DataBindingUtil.inflate(getLayoutInflater(), R.layout.book_list_item, parent, false);
return binding.getRoot();
// or just
// return getLayoutInflater().inflate(R.layout.book_list_item, parent, false);
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
// here it fails (and i cannot see source code of bind method)
BookListItemBinding.bind(view).setBook(new Book(cursor));
}
}
如何正确实现与CursorAdapter的绑定? >
How to correctly implement binding with CursorAdapter?
10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:致命例外:主10-14 06:25 :43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:Process:kandrac.xyz.library,PID:6231 10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:java.lang .RuntimeException:视图标签在视图上不正确:null 10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at kandrac.xyz.library.databinding.BookListItemBinding.bind(BookListItemBinding.java :135)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at kandrac.xyz.library.MainActivity $ BookCursorAdapter.bindView(MainActivity.java:95)10-14 06:25: 43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.widget.CursorAdapter.getView(CursorAdapter.java:254)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在 android.widget.AbsListView.obtainView(AbsListView.java:2347)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.widget.ListView.makeAndAddView(ListView.java:1864) 10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.widget.ListView.fillDown(ListView.java:698)10-14 06:25:43.847 6231-6231 / kandrac。 xyz.library E / AndroidRuntime:在android.widget.ListView.correctTooLow(ListView.java:1474)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.widget.ListView。 fillGap(ListView.java:672)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4991)10-14 06:25 :43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3418)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime :在android.widget.AbsListView.onTouchMove(AbsListView.java:3801)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.widget.AbsListView.onTouchEvent(AbsListView.java:3632)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.View.dispatchTouchEvent(View.java:8471)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup .java:2399)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2092)10-14 06:25:43.847 6231 -6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android .view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)10 -14 06:25:43.847 6231- 6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android。 view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)10- 14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)10-14 06:25:43.847 6231-6231 / kandrac.xyz。库E / AndroidRuntime:在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.ViewGroup.dispatchTransformedTouchEvent ViewGroup.java:2405)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)10-14 06:25:43.847 6231-6231 / kan drac.xyz.library E / AndroidRuntime:在android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view。 ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at com.android.internal.policy.impl.PhoneWindow $ DecorView.superDispatchTouchEvent(PhoneWindow。 java:2369)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1719)10-14 06 :25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.app.Activity.dispatchTouchEvent(Activity.java:2742)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at com.android。实习生al.policy.impl.PhoneWindow $ DecorView.dispatchTouchEvent(PhoneWindow.java:2330)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.View.dispatchPointerEvent(View。 java:8666)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4123)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ ViewPostImeInputStage.onProcess(ViewRootImpl.java:3989)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime :at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3544)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ InputStage.onDeliverToNext( ViewRootImpl.java:3597)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3563)10-14 06:25 :43.847 6231-6231 / kand rac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ AsyncInputStage.forward(ViewRootImpl.java:3680)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android。 view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3571)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java: 3737)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3544)10-14 06:25:43.847 6231- 6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ InputStage.onDeliverToNext(ViewRootImpl.java:3597)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3563)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl。 java:3571)10-14 06:25:43.847 6 231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3544)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime :在android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5807)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java: 5781)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5752)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.ViewRootImpl $ WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5897)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android。 view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:在android.view.InputEventReceiver.nativeConsumeBatchedInputE通风口(Native Method)10-14 06:25:43.847 6231-6231 / kandrac.xyz.library E / AndroidRuntime:at android.view.InputEven
10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: FATAL EXCEPTION: main 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: Process: kandrac.xyz.library, PID: 6231 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: java.lang.RuntimeException: view tag isn't correct on view:null 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at kandrac.xyz.library.databinding.BookListItemBinding.bind(BookListItemBinding.java:135) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at kandrac.xyz.library.MainActivity$BookCursorAdapter.bindView(MainActivity.java:95) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.CursorAdapter.getView(CursorAdapter.java:254) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.AbsListView.obtainView(AbsListView.java:2347) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.ListView.makeAndAddView(ListView.java:1864) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.ListView.fillDown(ListView.java:698) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.ListView.correctTooLow(ListView.java:1474) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.ListView.fillGap(ListView.java:672) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.AbsListView.trackMotionScroll(AbsListView.java:4991) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3418) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.AbsListView.onTouchMove(AbsListView.java:3801) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.widget.AbsListView.onTouchEvent(AbsListView.java:3632) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.View.dispatchTouchEvent(View.java:8471) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2399) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2092) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2405) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2369) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1719) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.app.Activity.dispatchTouchEvent(Activity.java:2742) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2330) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.View.dispatchPointerEvent(View.java:8666) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4123) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:3989) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3680) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3737) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3597) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3563) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3571) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3544) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:5807) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:5781) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:5752) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5897) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:185) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) 10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime: at android.view.InputEven
推荐答案
根据关于数据绑定的Android开发者视频它看起来像ItemBinding被设置为视图的标签(在它们的情况下它被传递在ViewHolder中)并稍后检索。这是我发现想法来找到绑定内部视图:
Based on Android developers video about databinding It looks like ItemBinding is set as tag for view (in their case it is passed inside ViewHolder) and retrieved later. Thats where I found idea to find binding inside views:
所以解决方案是:
private class BookCursorAdapter extends CursorAdapter {
...
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
BookListItemBinding binding = BookListItemBinding.inflate(getLayoutInflater(), parent, false);
return binding.getRoot();
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
Book book = new Book(cursor);
BookListItemBinding binding = DataBindingUtil.getBinding(view);
binding.setBook(book);
}
}
这篇关于视图中的Android - 视图标签不正确:null(CursorAdapter和DataBinding)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!