6 data-binding android android-adapter android-recyclerview android-databinding
我dataBinding在我的项目中使用来填充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>
Run Code Online (Sandbox Code Playgroud)
我onClick在这一行中指定了处理程序:
android:onClick="@{()->clickListener.onCardClick(listItems)}"
Run Code Online (Sandbox Code Playgroud)
下面是我的适配器:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,以下代码不起作用:
public void onCardClick(String listItems) {
Log.i("SADASSDASDAS", listItems);
}
Run Code Online (Sandbox Code Playgroud)
RecyclerViewAndroid适配器中的数据绑定public class DashboardPopularAdapter extends RecyclerView.Adapter<DashboardPopularAdapter.MyViewHolder> {
private Context mContext;
private List<PopularProduct> mPopularProductInfos;
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的主要问题是您错过了对 的呼叫binding.setClickListener()。还有其他一些问题。这是一个应该让您走上正轨的示例,忽略您不需要的部分:What is the suggest way to launch a DialogFragment from a ViewModel?
| 归档时间: |
|
| 查看次数: |
6775 次 |
| 最近记录: |