2016-12-11 4 views
2

私はいくつかの調査を行いましたが、Androidは現在2方向のデータバインディングをサポートしています。しかし、 "@ = {}"を使用すると、パッケージが見つからないためエラーが表示されます。 "@ {}"を使用すると問題なく動作します。双方向データバインディングでテキストを編集する際にレイアウトエラーが発生しました

アダプタ

public class InformationAdapter extends RecyclerView.Adapter<InformationAdapter.DataViewHolder> { 
    private LayoutInflater inflater; 
    List<Data> data = Collections.emptyList(); 
    Context context; 

    public InformationAdapter(List<Data> data, Context context) { 
     inflater = LayoutInflater.from(context); 
     this.data = data; 
     this.context = context; 
    } 

    @Override 
    public DataViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     CustomRowBinding binding = CustomRowBinding.inflate(inflater); 
     DataViewHolder dataViewHolder = new DataViewHolder(binding); 
     return dataViewHolder; 
    } 

    @Override 
    public void onBindViewHolder(DataViewHolder holder, int position) { 
     Data current = data.get(position); 
     holder.cBinding.setUserDetails(current); 
    } 

    @Override 
    public int getItemCount() { 
     return data.size(); 
    } 

    @Override 
    public void onAttachedToRecyclerView(RecyclerView recyclerView) { 
     super.onAttachedToRecyclerView(recyclerView); 
    } 

    class DataViewHolder extends RecyclerView.ViewHolder { 
     CustomRowBinding cBinding; 

     public DataViewHolder(CustomRowBinding binding) { 
      super(binding.getRoot()); 
      this.cBinding = binding; 
     } 
    } 
} 

XMLファイル

<?xml version="1.0" encoding="utf-8"?> 
<layout xmlns:android="http://schemas.android.com/apk/res/android"> 

    <data> 

     <variable 
      name="ItemPricing" 
      type="com.san.viewmodels.Item.ItemPricing" /> 
    </data> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      android:weightSum="5"> 

      <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_weight="1" 
       android:orientation="vertical"> 

       <ImageView 
        android:layout_width="90dp" 
        android:layout_height="90dp" 
        android:layout_gravity="center_vertical" 
        android:src="@drawable/coke" /> 

       <TextView 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="Cola Coke" 
        android:textColor="@color/colorPrimary" 
        android:textSize="24dp" /> 
      </LinearLayout> 


      <android.support.design.widget.TextInputLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_weight="1"> 

       <EditText 
        android:id="@+id/item_one" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="@{Integer.toString(ItemPricing.unitPrice1)}" /> 

      </android.support.design.widget.TextInputLayout> 

      <android.support.design.widget.TextInputLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_weight="1"> 

       <EditText 
        android:id="@+id/item_two" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="@{Integer.toString(ItemPricing.unitPrice2)}" /> 

      </android.support.design.widget.TextInputLayout> 

      <android.support.design.widget.TextInputLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_weight="1"> 

       <EditText 
        android:id="@+id/item_three" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:hint="Unit" 
        android:text="@{Integer.toString(ItemPricing.unitPrice3)}" /> 

      </android.support.design.widget.TextInputLayout> 

      <android.support.design.widget.TextInputLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_vertical" 
       android:layout_weight="1"> 

       <EditText 
        android:id="@+id/input_password" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:text="@={Integer.toString(ItemPricing.unitPrice4)}" /> 

      </android.support.design.widget.TextInputLayout> 
     </LinearLayout> 


    </RelativeLayout> 

</layout> 

私は "@ {何か}を" 使用している場合me.Iが=の問題を考えるために、この作品。

POJO値

public class ItemPricing 
{ 
private int unitPrice1; 

    public int getUnitPrice1() { 
     return this.unitPrice1; 
    } 

    public void setUnitPrice1(int unitPrice1) { 
     this.unitPrice1 = unitPrice1; 
    } 

private int unitPrice2; 

    public int getUnitPrice2() { 
     return this.unitPrice2; 
    } 

    public void setUnitPrice2(int unitPrice2) { 
     this.unitPrice2 = unitPrice2; 
    } 

private int unitPrice3; 

    public int getUnitPrice3() { 
     return this.unitPrice3; 
    } 

    public void setUnitPrice3(int unitPrice3) { 
     this.unitPrice3 = unitPrice3; 
    } 

private int unitPrice4; 

    public int getUnitPrice4() { 
     return this.unitPrice4; 
    } 

    public void setUnitPrice4(int unitPrice4) { 
     this.unitPrice4 = unitPrice4; 
    } 

} 

エラー

enter image description here

+0

[Androidの双方向バインディング(整数型でデータバインディングが存在しないため)](http://stackoverflow.com/questions/38998222/android-two-way-binding-with-integer-type-causes-databinding -Does-not-exist) –

答えて

0
package com.comfixme.fixer.adapter; 

import android.content.Context; 
import android.databinding.DataBindingUtil; 
import android.support.annotation.UiThread; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.comfixme.fixer.Model.CategoryModel; 
import com.comfixme.fixer.R; 
import com.comfixme.fixer.databinding.RowCategoryListBinding; 

import java.util.List; 


/** 
* Created by Argalon-PC on 8/15/2016. 
*/ 
public class CategoryAdapter extends RecyclerView.Adapter<CategoryAdapter.ViewHolder> { 

    private final Context mContext; 
    private List<CategoryModel> categoryModelArrayList; 
    private OnItemClickListener onItemClickListener; 

    String TAG = "CategoryAdapter"; 


    public CategoryAdapter(Context mContext, List<CategoryModel> categoryModelArrayList) { 

     this.categoryModelArrayList = categoryModelArrayList; 
     this.mContext = mContext; 

    } 

    @Override 
    public ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) { 
     final LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     final RowCategoryListBinding binding = DataBindingUtil.inflate(inflater, R.layout.row_category_list, parent, false); 
     return new ViewHolder(binding.getRoot(), binding); 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, final int position) { 
     final CategoryModel categoryModel = this.categoryModelArrayList.get(position); 
     holder.bind(categoryModel); 
    } 

    @Override 
    public int getItemCount() { 
     return categoryModelArrayList.size(); 
    } 

    @Override 
    public void onViewRecycled(ViewHolder holder) { 
     super.onViewRecycled(holder); 
    } 

    public List<CategoryModel> getCategory() { 
     return categoryModelArrayList; 
    } 

    public void setCategoryModelArrayList(List<CategoryModel> categoryModelArrayList) { 
     this.categoryModelArrayList = categoryModelArrayList; 
     notifyDataSetChanged(); 
    } 

    private void dataSetChanged() { 
     this.notifyDataSetChanged(); 

    } 

    public void setOnItemClickListener(OnItemClickListener onItemClickListener) { 

     this.onItemClickListener = onItemClickListener; 


    } 

    public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     private final RowCategoryListBinding binding; 




     public ViewHolder(final View view, final RowCategoryListBinding binding) { 
      super(view); 
      this.binding = binding; 
      view.setOnClickListener(this); 
      binding.mainLinear.setOnClickListener(this); 
      binding.cardView.setOnClickListener(this); 
      binding.imageViewSubcate.setOnClickListener(this); 
     } 



     @Override 
     public void onClick(View v) { 
      try { 

       Log.e(TAG, "onClick() called with: v = [" + onItemClickListener + "]"); 
       if (onItemClickListener != null) { 
        onItemClickListener.onItemClick(v, getAdapterPosition()); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

     @UiThread 
     public void bind(final CategoryModel categoryModel) { 
      this.binding.setCategory(categoryModel); 
     } 
    } 

    public interface OnItemClickListener { 
     public void onItemClick(View view, int position); 



    } 
} 
+0

この方法で試してください。 – Lovekesh

+0

recyclerviewセルの双方向バインディングを使用していますか? – Lovekesh

0

私はあなたが2ウェイアダプタの実装を欠落している、と思います。同様の問題については私のanswerを見てください。

関連する問題