2017-06-05 1 views
1

J'apprends à utiliser FastAdapter avec Realm. Here est mon modèle et voici comment je mets en œuvre OnClick dans un Fragment:Mettre en œuvre OnClickListener sur FastAdapter implémentant IItem

fastAdapter.withOnClickListener(new FastAdapter.OnClickListener<ProductsModel>() { 
    @Override 
    public boolean onClick(View v, IAdapter<ProductsModel> adapter, ProductsModel item, int position) { 
     Toast.makeText(getActivity(), "got it", Toast.LENGTH_SHORT).show(); 
     return false; 
    } 
}); 

Mais je ne suis pas le Toast apparaissant. Quelqu'un peut-il me dire ce qui me manque?

Mise à jour: Voici mon modèle

public class ProductsModel extends RealmObject implements IItem<ProductsModel, ProductsModel.ViewHolder>{ 
    @PrimaryKey 
    private String code; 

    private String name, generic, packSize; 
    private int quantity, status; 


    //variables needed for adapter 
    protected boolean isSelected = false; // defines if the item is selected 

    @Ignore 
    protected Object tag;// defines if this item is isSelectable 

    @Ignore 
    protected boolean isSelectable = true; 


    public String getCode() { 
     return code; 
    } 

    public void setCode(String code) { 
     this.code = code; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getPackSize() { 
     return packSize; 
    } 

    public void setPackSize(String packSize) { 
     this.packSize = packSize; 
    } 

    public int getQuantity() { 
     return quantity; 
    } 

    public void setQuantity(int quantity) { 
     this.quantity = quantity; 
    } 

    public int getStatus() { 
     return status; 
    } 

    public void setStatus(int status) { 
     this.status = status; 
    } 

    public String getGeneric() { 
     return generic; 
    } 

    public void setGeneric(String generic) { 
     this.generic = generic; 
    } 

    @Override 
    public Object getTag() { 
     return tag; 
    } 

    @Override 
    public ProductsModel withTag(Object tag) { 
     this.tag = tag; 
     return this; 
    } 

    @Override 
    public boolean isEnabled() { 
     return false; 
    } 

    @Override 
    public ProductsModel withEnabled(boolean enabled) { 
     return null; 
    } 

    @Override 
    public boolean isSelected() { 
     return isSelected; 
    } 

    @Override 
    public ProductsModel withSetSelected(boolean selected) { 
     return null; 
    } 

    @Override 
    public boolean isSelectable() { 
     return isSelectable; 
    } 

    @Override 
    public ProductsModel withSelectable(boolean selectable) { 
     this.isSelectable = selectable; 
     return this; 
    } 

    @Override 
    public int getType() { 
     return R.id.pwdsList; 
    } 

    @Override 
    public int getLayoutRes() { 
     return R.layout.item_product; 
    } 

    @Override 
    public View generateView(Context ctx) { 
     ViewHolder viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(getLayoutRes(), null, false)); 
     bindView(viewHolder, Collections.EMPTY_LIST); 
     return viewHolder.itemView; 
    } 

    @Override 
    public View generateView(Context ctx, ViewGroup parent) { 
     ViewHolder viewHolder = getViewHolder(LayoutInflater.from(ctx).inflate(getLayoutRes(), parent, false)); 
     bindView(viewHolder, Collections.EMPTY_LIST); 
     return null; 
    } 


    private ViewHolder getViewHolder(View view) { 
     return new ViewHolder(view); 
    } 

    @Override 
    public ViewHolder getViewHolder(ViewGroup parent) { 
     return getViewHolder(LayoutInflater.from(parent.getContext()).inflate(getLayoutRes(), parent, false)); 
    } 

    @Override 
    public void bindView(ViewHolder holder, List<Object> payloads) { 
     holder.name.setText(name + " " + packSize + " (" + quantity + ")"); 
     holder.generic.setText(generic); 
     holder.itemView.setSelected(isSelected()); 
    } 

    @Override 
    public void unbindView(ViewHolder holder) { 
     holder.name.setText(null); 
     holder.generic.setText(null); 
    } 

    @Override 
    public boolean equals(int id) { 
     return false; 
    } 

    @Override 
    public ProductsModel withIdentifier(long identifier) { 
     return null; 
    } 

    @Override 
    public long getIdentifier() { 
     return 0; 
    } 


    static class ViewHolder extends RecyclerView.ViewHolder{ 

     ATextView name, generic; 

     public ViewHolder(View itemView) { 
      super(itemView); 

      name = (ATextView) itemView.findViewById(R.id.name); 
      generic = (ATextView) itemView.findViewById(R.id.generic); 
     } 
    } 
} 
+0

L'attribut withSelectable de votre adaptateur fastadapter est-il défini sur true? –

+0

Oui 'fastAdapter.withSelectable (true);' –

+0

Vous avez incorrectement implémenté FastAdapter avec Realm. Model dans FastAdapter est un élément dans l'adaptateur recycleur, ce n'est pas un modèle comme vous le pensez. Wrong est ici'ProductsModel extends RealmObject'. Vous devez obtenir un exemple et suivez-le ici https://github.com/mikepenz/FastAdapter/tree/develop/app. –

Répondre

0

Votre article n'est pas enabled qui se traduit par l'événement click ne pas être transmis. Il vous suffit de modifier le code pour renvoyer isEnabled=true

@Override 
public boolean isEnabled() { 
    return true; 
} 
+0

A travaillé. Mon 'PrimaryKey' est un' String' pas un 'Long'. Votre 'getIdentifier()' ne supporte pas 'String' donc j'ai converti mon code en long en faisant' new BigInteger (sb.toString()). LongValue() 'ce qui n'est pas une bonne idée. Puis-je utiliser ma clé primaire comme identifiant de toute façon? –

+1

bien c'est une question différente. mais quelque chose comme ça fonctionnerait: private 'static long hashString64Bit (CharSequence str) { \t résultat long = 0xcbf29ce484222325 L; \t final int len ​​= str.length(); \t pour (int i = 0; i mikepenz