0

私は私のプロジェクトでdataBindingを使用していると私はdataBindingと私のRecyclerViewを満たすが、どのように私はdataBindingrecyclerViewの項目をクリックして疥癬ことができています。私はrecyclerViewの項目をクリックしてコードを書きましたが、動作しません。ここでデータ - アンドロイド

は私のxmlです:

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

    <data> 

     <variable 
      name="listItems" 
      type="String" /> 

     <variable 
      name="clickListener" 
      type="com.xxxx.xxxx.AdapterStartActivity" /> 
    </data> 

    <android.support.v7.widget.CardView 
     android:id="@+id/cardview1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="3dp" 
     android:onClick="@{()->clickListener.onCardClick(listItems)}" <===== 
     card_view:cardCornerRadius="7dp" 
     card_view:cardElevation="7dp" 
     card_view:cardMaxElevation="7dp" 
     card_view:contentPadding="0dp"> 

     <TextView 
      android:id="@+id/txtTitles" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_gravity="center" 
      android:gravity="center" 
      android:padding="10dp" 
      android:text="@{listItems}" 
      android:textColor="#000000" 
      android:textSize="20dp" 
      android:textStyle="bold" /> 
    </android.support.v7.widget.CardView> 
</layout> 

私はここにクリック項目を書いた:

android:onClick="@{()->clickListener.onCardClick(listItems)}" 

そして、ここでは私のアダプタです:

ベローメソッドは動作しません
public class AdapterStartActivity extends RecyclerView.Adapter<AdapterStartActivity.ViewHolder> { 
    private ListItemActivityStartBinding binding; 
    private List<String> listTitle; 
    private Context context; 

    public AdapterStartActivity(Context context, List<String> listTitle) { 
     this.listTitle = listTitle; 
     this.context = context; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder { 
     public TextView txtTitles; 

     public ViewHolder(View v) { 
      super(v); 
      txtTitles = (TextView) v.findViewById(R.id.txtTitles); 
     } 
    } 

    @Override 
    public AdapterStartActivity.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(context).inflate(R.layout.list_item_activity_start, parent, false); 
     binding = DataBindingUtil.bind(view); 
     ViewHolder viewHolder = new ViewHolder(view); 
     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder Vholder, int position) { 
     binding.setListItems(listTitle.get(position)); 
    } 

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

    public void onCardClick(String listItems) { 
     Log.i("SADASSDASDAS", listItems); 
    } 
} 

public void onCardClick(String listItems) { 
     Log.i("SADASSDASDAS", listItems); 
    } 

答えて

0

あなたの主な問題は、あなたがbinding.setClickListener()への呼び出しが欠落していることです。他にもいくつか問題があります。ここでは、必要のない部分を無視し、正しい軌道に乗ってあなたを取得する必要があります例です。recyclerViewのアダプターに結合What is the recommended way to launch a DialogFragment from a ViewModel?

+0

私は、クリックされたアイテムの位置を取得することができます? –

+0

私の問題を解決しました:binding.getRoot()。setTag(position);およびview.getTag()。 ;) –

+0

@JoJoRoid 'RecyclerView.ViewHolder'には、位置情報を取得するためのメソッドがいくつかあります。最も一般的には、' ViewHolder.getAdapterPosition() 'が必要です。 – Uli

0

android:onClick="someMethod"属性を定義すると、Androidは単にあなたのためにOnClickListenerを実装するので、このコードを試してみてください。

コードの実装

public static class ViewHolder extends RecyclerView.ViewHolder { 
     public TextView txtTitles; 

     public ViewHolder(View v) { 
      super(v); 
      txtTitles = (TextView) v.findViewById(R.id.txtTitles); 
     } 

     v.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        onCardClick(listItems) 
       } 
     }); 
    } 
0
public class StudentAdapter extends RecyclerView.Adapter<StudentAdapter.ViewHolder> { 
StudentListRowBinding listRowBinding; 
ArrayList<Student> studentlist; 

public StudentAdapter(ArrayList<Student> studentlist) { 
    this.studentlist = studentlist; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    listRowBinding= DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),R.layout.student_list_row,parent,false); 
    return new ViewHolder(listRowBinding.getRoot()); 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
     /*listRowBinding.stuname.setText(studentlist.get(position).getName()); 
     listRowBinding.stumob.setText(studentlist.get(position).getMobile()); 
     listRowBinding.stucity.setText(studentlist.get(position).getCity()); */ 

    holder.stuname.setText(studentlist.get(position).getName()); 
    holder.stumob.setText(studentlist.get(position).getMobile()); 
    holder.stucity.setText(studentlist.get(position).getCity()); 


    if (position == getItemCount() - 1) 
     holder.divider.setVisibility(View.GONE); 
} 

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

class ViewHolder extends RecyclerView.ViewHolder { 
    TextView stuname, stumob, stucity; 
    View divider; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     stuname = (TextView) itemView.findViewById(R.id.stuname); 
     stumob = (TextView) itemView.findViewById(R.id.stumob); 
     stucity = (TextView) itemView.findViewById(R.id.stucity); 
     divider = itemView.findViewById(R.id.divider); 
    } 
} 

}

0

データ - アンドロイド

パブリッククラスDashboardPopularAdapterはRecyclerView.Adapterを継承します。{ プライベートコンテキストmContext; プライベートリストmPopularProductInfos; Uli.How @

public DashboardPopularAdapter(Context context, List<PopularProduct> popularProductInfos) { 
    mContext = context; 
    mPopularProductInfos = popularProductInfos; 
} 

@Override 
public DashboardPopularAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int type) { 
    ViewDashboardProductsBinding viewProductCategoryBinding = ViewDashboardProductsBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); 
    return new MyViewHolder(viewProductCategoryBinding); 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, int position) { 
    final PopularProduct popularProductInfo = mPopularProductInfos.get(position); 

    holder.binding.txtProductName.setText(popularProductInfo.getProductName()); 

    Picasso.with(mContext).load(popularProductInfo.getProductPhoto()) 
      .error(R.drawable.icon_pills) 
      .into(holder.binding.imgProduct); 

    holder.binding.llProduct.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mContext.startActivity(new Intent(mContext, ProductDetailsActivity.class) 
        .putExtra("medicine_id", popularProductInfo.getProductId()) 
        .putExtra("medicine_name", popularProductInfo.getProductName())); 
     } 
    }); 


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

public static class MyViewHolder extends RecyclerView.ViewHolder { 
    private final ViewDashboardProductsBinding binding; 

    public MyViewHolder(ViewDashboardProductsBinding binding) { 
     super(binding.getRoot()); 
     this.binding = binding; 
    } 
} 

}

関連する問題