Viz*_*har 5 data-binding android listview
所以昨天我终于找到了一些时间来尝试新的DataBinding库.我曾尝试将它与CursorAdapter一起使用,但没有成功.
正如Androidguys在其页面上所写:
如果您在ListView或RecyclerView适配器中使用数据绑定项,您可能更喜欢使用:
Run Code Online (Sandbox Code Playgroud)ListItemBinding binding = ListItemBinding.inflate(layoutInflater, viewGroup, false); //or ListItemBinding binding = DataBindingUtil.inflate(layoutInflater, R.layout.list_item, viewGroup, false);
但是在CursorAdapter中我必须将Inflating和Binding分成两种方法.那么如何正确实现呢?大多数情况下我得到一个异常:视图标签在视图上不正确: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));
}
}
Run Code Online (Sandbox Code Playgroud)
如何正确实现与CursorAdapter的绑定?
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标签在视图上不正确: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.库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: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:在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:在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:在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:在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-12 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.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:43847 6231-6231/kandrac.xyz.library E/AndroidRuntime:在android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2106)10-12 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/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:在android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60)10-12 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime:在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:在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:在android.view.ViewRootImpl $ InputStage.forward(ViewRootImpl.java:3563)10-12 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime:在android.view.ViewRootImpl $ AsyncInputStage.forward (ViewRootImpl.java:3680)10-14 06:25:43847 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:在android.view.ViewRootImpl $ AsyncInputStage.apply(ViewRootImpl.java:3737)10-12 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime:在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:在android.view.ViewRootImpl $ InputStage.apply(ViewRootImpl.java:3571)10-14 06:25:43.847 6231-6231/kandrac.xyz.library E/AndroidRuntime:在android.view.ViewRootImpl $ InputStage.deliver(ViewRootImpl.java:3544)10-12 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: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:在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:在android.view.InputEven
基于Android开发人员关于数据绑定的视频看起来,ItemBinding被设置为视图标记(在它们的情况下,它在ViewHolder中传递)并稍后检索.多数民众赞成在那里我发现想要在视图内部找到绑定:
所以解决方案是:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3599 次 |
| 最近记录: |