2016-07-29 6 views
-1

Mein Adapter:Recyclerview auf Klick Null-Objekt Referenz

public class Adaptor extends RecyclerView.Adapter<Adaptor.Holder>{ 

private ArrayList<Winkel> winkels; 
private LayoutInflater inflater; 
private ImageView icon; 
private ItemCLickCallback itemCLickCallback; 

public interface ItemCLickCallback { 
    void onItemClick(int p); 
    void onSecItemClick(int p); 

} 

public void setItemCLickCallback(final ItemCLickCallback itemCLickCallback1){ 
    this.itemCLickCallback = itemCLickCallback; 
} 

public Adaptor (ArrayList<Winkel> winkels,Context c){ 
    this.inflater = LayoutInflater.from(c); 
    this.winkels = winkels; 
} 


@Override 
public Holder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view = inflater.inflate(R.layout.card_item, parent, false); 
    return new Holder(view); 
} 

@Override 
public void onBindViewHolder(Holder holder, int position) { 
    Winkel winkel = winkels.get(position); 
    holder.title.setText(winkel.getNaam()); 
    if (winkel.isFavourtite()){ 
     holder.icon.setImageResource(R.drawable.ic_star_black_18dp); 
    } 
    else{ 
     holder.icon.setImageResource(R.drawable.ic_star_border_black_18dp); 
    } 

} 

@Override 
public int getItemCount() { 

    return winkels.size(); 
} 

class Holder extends RecyclerView.ViewHolder implements View.OnClickListener{ 

    private TextView title; 
    private View container; 
    private ImageView icon; 

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

     title = (TextView)itemView.findViewById(R.id.lbl_item_text); 
     container = itemView.findViewById(R.id.cont_item_root); 
     icon = (ImageView) itemView.findViewById(R.id.im_item_icon_secondary); 
     icon.setOnClickListener(this); 
     container.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     if(v.getId()==R.id.cont_item_root){ 
      Log.d("lol",Integer.toString(getAdapterPosition())); 
      itemCLickCallback.onItemClick(getAdapterPosition()); 

     } 
     else{ 
      itemCLickCallback.onSecItemClick(getAdapterPosition()); 
     } 
    } 
} 
} 

Meine Übersicht Fragment:

@Override 
public void onItemClick(int p) { 
    Log.d("lol",(Integer.toString(p))); 
    Winkel winkel = (Winkel) mijnwinkels.get(p); 

    Bundle detailsBundle = new Bundle(); 
    detailsBundle.putString(DETAILS_NAAM,winkel.getNaam()); 
    detailsBundle.putString(DETAILS_ADRES,winkel.getAdres()); 
    detailsBundle.putString(DETAILS_DEELGEMEENTE,winkel.getDeelGemeente()); 
    detailsBundle.putString(DETAILS_GEMEENTE,winkel.getGemeente()); 
    detailsBundle.putString(DETAILS_POSTCODE,winkel.getPostcode()); 

    Details detail= new Details(); 
    detail.setArguments(detailsBundle); 
    this.getFragmentManager().beginTransaction() 
      .replace(R.id.details,detail,null) 
      .addToBackStack(null) 
      .commit(); 
} 

Fehlermeldung:

java.lang.NullPointerException: Attempt to invoke interface method 'void com.example.hoofdgebruiker.winkelskortrijk.Utill.Adaptor$ItemCLickCallback.onItemClick(int)' on a null object reference. 

Mein Code arbeitet bis zu dem Punkt, wo ich Holen Sie mir Recyclerview, die Elemente sind darin, aber ich kann nicht auf eine von ihnen klicken, ohne diesen Fehler zu bekommen, und ich verstehe nicht warum. Was mache ich falsch, dass es eine Nullobjektreferenz ist? Keines meiner Protokolle wird angezeigt.

Edit: meine Methode onItemCLickCallback wird hier verwendet:

@Override 
public void onSuccess(ArrayList<Winkel> winkels) { 
    mijnwinkels = winkels; 
    Adaptor adaptor = new Adaptor(mijnwinkels, this.getActivity()); 
    mRecyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); 
    mRecyclerView.addItemDecoration(new VerticalSpace(30)); 
    mRecyclerView.setAdapter(adaptor); 
    adaptor.setItemCLickCallback(this); 
} 
+0

@ R.Zagórski Ich habe einen Verweis darauf, ich habe den Code hinzugefügt. Ich sehe einfach nicht, wo ich etwas falsch mache, ich weiß technisch, wie man eine Nullpointerexpektion beheben kann, ich weiß einfach nicht, wie ich es in diesem Code reparieren soll. – user3117628

Antwort

1

Es ist ein Tippfehler in Ihrer Methode Argumente

public void setItemCLickCallback(final ItemCLickCallback itemCLickCallback1){ 
    this.itemCLickCallback = itemCLickCallback; 
} 

Sie itemCLickCallback1 erwarten und Zuweisen itemCLickCallback (die Differenz der Extra bemerken ‚1 'als Suffix).

+0

:) Danke, ziemlich dummer Fehler, ich war dabei, die ganze Sache umzuschreiben. Vielen Dank – user3117628