【问题标题】:I want to call a Toast message from an inner class (ViewHolder)我想从内部类(ViewHolder)调用 Toast 消息
【发布时间】:2018-02-05 00:16:01
【问题描述】:

主要出于测试目的,我希望能够通过单击我在 ViewHolder 中为 RecyclerView 引用的 imageView 创建 Toast 消息,但我不知道如何将上下文传递给它。任何帮助,将不胜感激。

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

据我所知,您不能从不扩展 Activity 类的东西中调用 Toast 消息,但必须有某种类型的解决方法。

【问题讨论】:

  • 通过 getApplicationContext() 将应用程序的上下文传递给 MatchItemAdapter 类的类构造函数。将上下文存储到同一类中的私有变量中,并使用该上下文来显示 Toast。

标签: android android-recyclerview android-toast


【解决方案1】:

使用view.getContext()

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

【讨论】:

  • 谢谢,看起来很简单,哈哈。我是初学者,我找不到我的具体问题的答案。再次感谢
猜你喜欢
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多