ここpoint_of_sale_list_item.xmlxmlに2つの変数をバインドすることはできますか?ここで
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="item"
type="com.myproject.android.customer.api.model.Merchant" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/imageViewPhoto"
android:layout_width="90dp"
android:layout_height="90dp"/>
<TextView
android:id="@+id/phoneTextView"
android:layout_width="0dp"
android:layout_height="wrap_content"/>
</android.support.constraint.ConstraintLayout>
</layout>
ルートアダプタ:
public abstract class PreviewSortAdapter extends RealmRecyclerViewAdapter {
public PreviewSortAdapter(Context context, @Nullable OrderedRealmCollection data, boolean autoUpdate) {
super(data, true);
setHasStableIds(true);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
ViewDataBinding binding = DataBindingUtil.inflate(layoutInflater, viewType, parent, false);
setClickHandler(binding);
return new PreviewBaseViewHolder(binding);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Object obj = getItem(position);
PreviewBaseViewHolder previewViewHolder = (PreviewBaseViewHolder) holder;
ViewDataBinding viewDataBinding = previewViewHolder.getBinding();
viewDataBinding.setVariable(BR.item, obj);
viewDataBinding.executePendingBindings(); //binding must be executed immediately
}
@Override
public int getItemViewType(int position) {
return getLayoutForPosition(position);
}
protected abstract int getLayoutForPosition(int position);
private class PreviewBaseViewHolder extends RecyclerView.ViewHolder {
private final ViewDataBinding binding;
private PreviewBaseViewHolder(ViewDataBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
private ViewDataBinding getBinding() {
return binding;
}
}
}
私は、変数をバインドする方法setVariable()
を使用して "項目" モデルと。
そして、ここで具体的な子アダプタ:
OK point_of_sale_list_item:
public class MapListSortAdapter extends PreviewSortAdapter {
private static final String TAG = MapListSortAdapter.class.getName();
public MapListSortAdapter(Context context, OrderedRealmCollection<Merchant> data) {
super(context, data, true);
}
@Override
protected int getLayoutForPosition(int position) {
return R.layout.point_of_sale_list_item;
}
}
このIアダプタでは、私が唯一のレイアウトXMLを指定します。すべて正常に動作します。
しかし、私は別のモデルから設定された電話番号を読む必要があります。 IDでxmlでandroid:[email protected]+id/phoneTextView
だから私はバインドする必要があります秒変数です。このような 何か:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="item"
type="com.myproject.android.customer.api.model.Merchant" />
<variable
name="point"
type="com.myproject.android.customer.api.model.PointOfSale" />
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white">
<ImageView
android:id="@+id/imageViewPhoto"
android:layout_width="90dp"
android:layout_height="90dp" />
<TextView
android:id="@+id/phoneTextView"
android:layout_width="0dp"
android:text="@{point.phone}"
android:layout_height="wrap_content" />
</android.support.constraint.ConstraintLayout>
</layout>
ここでPOJOコード:
public class PointOfSale {
private int id;
private String name;
private String address;
private String phone;
private String email;
public String getName() {
return name;
}
public String getAddress() {
return address;
}
}
しかし、二vairable(ポイント)が結合していなかったので、もちろん、私は、エラーを取得:
java.lang.IllegalStateException: failed to analyze: android.databinding.tool.util.LoggedErrorException: Found data binding errors.
****/ data binding error ****msg:Could not find accessor com.myproject.android.customer.api.model.PointOfSale.phone
file:\myProject\app\src\main\res\layout\point_of_sale_list_item.xml
loc:61:28 - 61:38
****\ data binding error ****
ので、 :
- 2つ目のバインディングが可能ですか?
- 2番目の変数からデータを取得するにはどうすればよいですか?
この2つのモデルを連結する新しいモデルを作成することはできますか?
あなたは 'PointOfSale'にsetter/getterメソッドがあるとすれば、xmlに2つの変数を使うことができますか? – Alex
いいえ、問題は2つの変数とは関係がない可能性があると私は言っています。私は問題なく2つの変数を使用しました。私は 'phone'がパブリックフィールドでないか、または' getPhone'ゲッターが公開されていないため、あなたが見ていたエラーが起こっていると推測していました。おそらくあなたは 'PointOfSale'コードを投稿できますか? –
私の投稿を更新します。 – Alex