2017-08-30 2 views
0

J'essaie de réutiliser l'adaptateur Firebase dans deux activités avec différents comportements OnClick Listener selon les deux activités.Différent OnClickListener pour le même adaptateur Firebase

Voici le code:

 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; 
    } 
} 

, ce qui est le code pour appeler une activité qui appelle la classe firebaseadapter, la classe est de retour d'un adaptateur à l'aide getAdapter méthode et qui est donnée à la vue recycleur:

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

    mRecyclerView.setAdapter(adapter); 
+0

quelle est la question? – Shailesh

+0

Je souhaite réutiliser l'adaptateur Firebase dans une autre activité mais avec une méthode onClickListener différente @Shailesh – Pheonix

+0

Où est le onClick() dans votre code? – Yazan

Répondre

2

Vous pouvez définir onClickListinner() dans tout élément dans votre viewHolder

Essayez quelque chose comme ça:

 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 
       } 
      }); 
     } 

A propos de la réutilisation, il est préférable de creat une classe qui étend FirebaseRecyclerAdapter, et les intérieur définissent la méthode populateViewHolder, ayant cette condition pour chaque OnClickListener.

As a example:

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) { 
     ... 
    } 
} 

Et puis définissez l'adaptateur:

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

Qu'en est-il de l'utilisation de l'adaptateur dans 10 activités alors il y en aura 10 sinon, Pensez-vous que c'est un moyen efficace de faire le travail? @GuilhermeFGL – Pheonix

+0

Je mets à jour ma réponse qui est une solution de «réutilisation». – GuilhermeFGL