2017-08-27 2 views
0

Essentiellement à des fins de test, je veux être en mesure de créer un message Toast en cliquant sur un imageView que j'ai référencé dans mon ViewHolder pour un RecyclerView mais je peux ' t comprendre comment passer un contexte. Toute aide serait appréciée.Je veux appeler un message Toast à partir d'une classe interne (ViewHolder)

package com.checkinsystems.ez_score.utils; 

import android.app.Activity; 
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 com.checkinsystems.ez_score.R; 
import com.checkinsystems.ez_score.Sample.TestActivity; 
import com.checkinsystems.ez_score.model.Match; 

import java.util.List; 


public class MatchItemAdapter extends RecyclerView.Adapter<MatchItemAdapter.ViewHolder> { 

    private List<Match> mMatches; 
    private Context mContext; 

    public MatchItemAdapter(Context context, List<Match> items){ 
     this.mContext = context; 
     this.mMatches = items; 
    } 

    @Override 
    public MatchItemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     LayoutInflater inflater = LayoutInflater.from(mContext); 
     View itemView = inflater.inflate(R.layout.list_item_match, parent, false); 
     ViewHolder viewHolder = new ViewHolder(itemView); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(MatchItemAdapter.ViewHolder holder, int position) { 
     Match match = mMatches.get(position); 

     try { 
      holder.tvName.setText(match.getMatchName()); 
      holder.tvDate.setText(match.getMatchDate()); 
      holder.imageView.findViewById(R.id.imageView); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 


    } 

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


    public static class ViewHolder extends RecyclerView.ViewHolder{ 

     public TextView tvName; 
     public TextView tvDate; 
     public ImageView imageView; 

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

      tvName = (TextView)itemView.findViewById(R.id.match_name); 
      tvDate = (TextView)itemView.findViewById(R.id.match_date); 
      imageView = (ImageView)itemView.findViewById(R.id.imageView); 

      imageView.setOnClickListener(new View.OnClickListener(){ 

       @Override 
       public void onClick(View view) { 
        Toast.makeText(, "onClick working", Toast.LENGTH_LONG).show(); 
       } 
      }); 
     } 
    } 
} 

D'après ce que je comprends, vous ne pouvez pas appeler un message Toast de quelque chose qui ne va pas la classe d'activité, mais il doit y avoir un travail autour d'un certain type.

+0

passer le contexte de l'application par getApplicationContext() au constructeur de la classe de la classe MatchItemAdapter. Stockez le contexte dans une variable privée de la même classe et utilisez ce contexte pour afficher Toasts. –

Répondre

0

Utilisez view.getContext()

public void onClick(View view) { 
    Toast.makeText(view.getContext(), "onClick working", Toast.LENGTH_LONG).show(); 
} 
+0

Merci, il semble si simple lol. Je suis débutant et je n'ai pas trouvé la réponse à ma question spécifique. Merci encore –