2016-07-20 16 views
0

In meinem Adapter für meine RecyclerView versuche ich Text, wenn Text auf jeder Zeile angeklickt wird, aber ich bekomme einen Kontextfehler. Ich bin ein Anfänger Programmierer, also bin ich mir nicht sicher, was ich tun soll. Danke im Voraus. Ich versuche auch, eine App zu erstellen, in der es in jeder Zeile einen Chat für Nachrichtengruppen gibt, den jeder sehen kann, und jeder Benutzer hat die Möglichkeit, eine Zeile mit dem von ihnen gewählten Titel hinzuzufügen. Wenn mir jemand dabei helfen könnte, wäre das großartig! Und sehr geschätzt werden, weil ich ziemlich Anfänger bin. Vielen Dank!Kontextfehler im Adapter für RecyclerView

Der Fehler, den ich bekomme, findet statt, wo ich meinen Toast habe, wo es Kontext sagt.

Adaper Code:

package com.example.patri.index01; 

import android.content.Context; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 
import java.util.Collections; 
import java.util.List; 

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> { 
private LayoutInflater inflater; 
List<Information> data= Collections.emptyList(); 

public MyAdapter(Context context, List<Information> data){ 
    inflater=LayoutInflater.from(context); 
    this.data=data; 

} 
@Override 
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

    View view=inflater.inflate(R.layout.custom_row, parent,false); 
    MyViewHolder holder=new MyViewHolder(view); 
    return holder; 
} 

@Override 
public void onBindViewHolder(MyViewHolder holder, final int position) { 

    Information current=data.get(position); 

    holder.title.setText(current.title); 
    holder.icon.setImageResource(current.iconId); 

    holder.title.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "Item clicked at " +position, Toast.LENGTH_SHORT) 
     } 
    }); 


} 

@Override 
public int getItemCount() { 
    return data.size(); 
} 

class MyViewHolder extends RecyclerView.ViewHolder{ 
    TextView title; 

    ImageView icon; 

    public MyViewHolder(View itemView) { 

     super(itemView); 

     title= (TextView)itemView.findViewById(R.id.listText); 

     icon= (ImageView) itemView.findViewById(R.id.listIcon); 

    } 
} 
} 

Informationen Klasse:

public class Information { 

int iconId; 

String title; 

} 
+0

Sie nicht 'context' noch –

Antwort

1

Problem wird immer da context nicht zugänglich innerhalb onClick Methode, die in MyAdapter Klasse Constructor übergeben wird .

In onClick Verfahren Verwendung v.getContext():

Toast.makeText(v.getContext(), "Item clicked at " +position, Toast.LENGTH_SHORT) 

ODER

Deklarieren context in MyAdapter Klasse und initialisieren es in Constructor:

Context context; 
public MyAdapter(Context context, List<Information> data){ 
    this.context=context; 
    inflater=LayoutInflater.from(context); 
    this.data=data; 

} 
+0

Wissen Sie, wie ich die ganze Zeile anstatt nur den Text anklicken könnte? –

+0

@PatrickJ .: das ganze Layout anklickbar machen anstelle von TextView, dann 'setOnClickListener' zum Layout hinzufügen –

+0

Wie würde ich das mit der Information Klasse machen? Muss ich es oder etwas definieren? Ich füge eine Bearbeitung @ ρяσѕρєя K hinzu –

0

ändern Toast.makeText(context, "Item clicked at " +position, Toast.LENGTH_SHORT)-Toast.makeText(v.getContext(), "Item clicked at " + position, Toast.LENGTH_SHORT).show();

+0

hat initialisieren mach es so, wenn die ganze Zeile angeklickt ist, wird der Toast angezeigt? –

+0

Ja. Sie haben keinen variablen Kontext innerhalb von 'onClick' Callback, also müssen Sie es bekommen, sehen hat es. Also schreiben wir 'v.getContext()'. Außerdem müssen Sie 'show()' aufrufen, um Ihren Toast anzuzeigen und nicht nur zu erstellen. –

Verwandte Themen