同一Firebase适配器的不同OnClickListener



我正试图在两个活动中重用firebase适配器,这两个活动具有不同的onClick Listener行为,具体取决于这两个行为。

这是代码:

public class ProductListAdapter  {
private Query mQuery;
private Context mContext;
private FirebaseRecyclerAdapter<Product,ProductViewHolder> mAdapter;
public ProductListAdapter(Query query,Context context) {
mQuery = query;
mContext = context;
Update();
}

public void Update(){
mAdapter = new FirebaseRecyclerAdapter<Product, ProductViewHolder>(
Product.class,
R.layout.list_item_product,
ProductViewHolder.class,
mQuery
){
@Override
protected void populateViewHolder(ProductViewHolder viewHolder, Product model, int position) {
viewHolder.mProductTitle.setText(model.getProductTitle());
viewHolder.mProductDescription.setText(model.getProductDescription());
Product product = getItem(position);
viewHolder.bindView(product);

Picasso.with(mContext)
.load(model.getPhotoUrl())
.into(viewHolder.mThumbnail);

}
};

}
public RecyclerView.Adapter getAdapter(){
return  mAdapter;
}
public static class ProductViewHolder extends RecyclerView.ViewHolder{
Product mProduct;
TextView mProductTitle;
TextView mProductDescription;
ImageView mThumbnail;
public ProductViewHolder(View itemView) {
super(itemView);
mProductTitle = (TextView) itemView.findViewById(R.id.product_title);
mProductDescription = (TextView) itemView.findViewById(R.id.product_description);
mThumbnail = (ImageView) itemView.findViewById(R.id.list_image);

}

public void bindView(Product product){
mProduct = product;
}
}

这是调用firebaseadapter类的活动中的代码,该类使用getAdapter方法返回一个适配器,并将其提供给回收器视图:

ProductListAdapter productListAdapter = 
new               ProductListAdapter(query,getActivity());
RecyclerView.Adapter adapter = productListAdapter.getAdapter();
mRecyclerView.setAdapter(adapter);

您可以在viewHolder内的任何元素中设置onClickListinner()

试试这样的东西:

if (condition) {
viewHolder.mThumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
... doStuff
}
});    
} else {
viewHolder.mThumbnail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
... doOtherStuff
}
});
}

关于重用,最好创建一个扩展FirebaseRecyclerAdapter的类,并在其中定义方法populateViewHolder,每个OnClickListener都有这个条件。

例如:

public class RecipeAdapter extends FirebaseRecyclerAdapter<Product, ProductViewHolder>{
private static final String TAG = RecipeAdapter.class.getSimpleName();
private Context context;
public RecipeAdapter(Class<Product> modelClass, int modelLayout, Class<ProductViewHolder> viewHolderClass, DatabaseReference ref, Context context) {
super(modelClass, modelLayout, viewHolderClass, ref);
this.context = context;
}
@Override
protected void populateViewHolder(ProductViewHolder viewHolder, Product model, int position) {
...
}
}

然后设置适配器:

mAdapter = new RecipeAdapter<Product, ProductViewHolder>(
Product.class,
R.layout.list_item_product,
ProductViewHolder.class,
mQuery,
this
)

最新更新