我正试图在两个活动中重用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
)