Android RecyclerView-从我的ViewHolder获取对象

Android RecyclerView-从我的ViewHolder获取对象,android,android-recyclerview,onclicklistener,listitem,Android,Android Recyclerview,Onclicklistener,Listitem,我正在创建一个接受匹配对象列表的RecyclerView。我已经为listItem设置了onClickListener。我想在单击此listItem时将匹配设置为活动。如何在单击特定listItem时访问存储在该listItem中的Match对象 以下是我的RecyclerView适配器/视图持有者类: package com.checkinsystems.ez_score.utils; import android.content.Context; import android.conten

我正在创建一个接受匹配对象列表的RecyclerView。我已经为listItem设置了onClickListener。我想在单击此listItem时将匹配设置为活动。如何在单击特定listItem时访问存储在该listItem中的Match对象

以下是我的RecyclerView适配器/视图持有者类:

package com.checkinsystems.ez_score.utils;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.graphics.Typeface;
import android.support.v7.app.ActionBar;
import android.support.v7.widget.PopupMenu;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MenuItem;
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.EditMatchActivity;
import com.checkinsystems.ez_score.MainActivity;
import com.checkinsystems.ez_score.MatchActivity;
import com.checkinsystems.ez_score.R;
import com.checkinsystems.ez_score.model.Match;
import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;



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

    private List<Match> mMatches;
    private final 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(final 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);
            holder.hiddenMatchId.setText(match.getMatchId());
            holder.container.findViewById(R.id.list_item_container);

            Typeface bold = Typeface.create("san-serif", Typeface.BOLD);

            SharedPreferences sharedPreferences = mContext.getSharedPreferences(
                    MY_GLOBAL_PREFS, mContext.MODE_PRIVATE);
            String currentMatchName = sharedPreferences.getString(CURRENT_MATCH_NAME, "current_match_name");


            String itemName = holder.tvName.getText().toString();

            if (itemName.equals(currentMatchName)) {
                holder.tvName.setTypeface(bold);
                holder.container.setBackgroundColor(Color.parseColor("#a4a4a4"));
                holder.tvName.setTextSize(24);
                holder.matchIsActive = true;


                SharedPreferences.Editor editor = mContext.getSharedPreferences(MY_GLOBAL_PREFS, mContext.MODE_PRIVATE).edit();
                editor.putString(CURRENT_MATCH_ID, match.getMatchId());
                editor.putString(CURRENT_MATCH_NAME, match.getMatchName());
                editor.putString(CURRENT_MATCH_CLUB_ID, match.getClubId());
                editor.putString(CURRENT_MATCH_DATE, match.getMatchDate());
                editor.putString(CURRENT_MATCH_LEVEL, match.getMatchLevel());
                int spinnerPos;
                switch (match.getMatchLevel()){
                    case "I":
                        spinnerPos = 0;
                        break;
                    case "II":
                        spinnerPos = 1;
                        break;
                    case "III":
                        spinnerPos = 2;
                        break;
                    case "IV":
                        spinnerPos = 3;
                        break;
                    default:
                        spinnerPos = 0;
                }
                editor.putInt(POSITION_OF_SPINNER, spinnerPos);
                editor.apply();

            }


        } 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 TextView hiddenMatchId;
        public View container;

        boolean matchIsActive = false;


        public ViewHolder(final 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);
            hiddenMatchId = (TextView) itemView.findViewById(R.id.match_id_hidden);
            container = (View) itemView.findViewById(R.id.list_item_container);

            imageView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    final PopupMenu popup = new PopupMenu(view.getContext(), imageView);
                    if (!matchIsActive) {
                        popup.getMenuInflater().inflate(R.menu.popup_menu, popup.getMenu());
                        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                            @Override
                            public boolean onMenuItemClick(MenuItem item) {
                                switch (item.getItemId()) {
                                    case R.id.edit_match:

                                        /////////////////////////////////////////////////////////
                                        // Make this match the current one before sending the intent
                                        String matchId = hiddenMatchId.getText().toString();

                                        Intent intent = new Intent(itemView.getContext(), EditMatchActivity.class);
                                        intent.putExtra(EditMatchActivity.EXTRA_MATCH_ID, matchId);
                                        itemView.getContext().startActivity(intent);
                                        break;
                                    case R.id.delete_match:


                                        // to delete a match here
                                        // also remove from recyclerview

                                        break;
                                }
                                return false;
                            }
                        });
                    } else {

                        // If the current item is selected and you click on the side menu -> don't show delete
                        // delete isn't an option for active Matches
                        popup.getMenuInflater().inflate(R.menu.popup_menu_no_delete, popup.getMenu());
                        popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                            @Override
                            public boolean onMenuItemClick(MenuItem item) {
                                switch (item.getItemId()) {
                                    case R.id.edit_match:
                                        // Make this match the current one before sending the intent


                                        Intent intent = new Intent(itemView.getContext(), EditMatchActivity.class);
                                        itemView.getContext().startActivity(intent);
                                        break;

                                }
                                return false;
                            }
                        });
                    }

                    //displaying the popup
                    popup.show();
                }
            });

            container.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                    matchIsActive = true;   // maybe this is redundant

                    String matchName = tvName.getText().toString();
                    Gson gson = new Gson();

                    SharedPreferences.Editor editor = itemView.getContext().getSharedPreferences(
                            MY_GLOBAL_PREFS, itemView.getContext().MODE_PRIVATE).edit();
                    //editor.putString(CURRENT_MATCH_NAME, matchName);
                    editor.apply();


                    Intent intent = new Intent(itemView.getContext(), MainActivity.class);
                    itemView.getContext().startActivity(intent);

                }
            });

        }

    }
}
package com.checkinsystems.ez_score.utils;
导入android.content.Context;
导入android.content.Intent;
导入android.content.SharedReferences;
导入android.graphics.Color;
导入android.graphics.Typeface;
导入android.support.v7.app.ActionBar;
导入android.support.v7.widget.PopupMenu;
导入android.support.v7.widget.RecyclerView;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.MenuItem;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入android.widget.Toast;
导入com.checkinsystems.ez_score.EditMatchActivity;
导入com.checkinsystems.ez_score.main活动;
导入com.checkinsystems.ez_score.MatchActivity;
导入com.checkinsystems.ez_score.R;
导入com.checkinsystems.ez_score.model.Match;
导入com.google.gson.gson;
导入java.io.BufferedReader;
导入java.io.File;
导入java.io.FileFilter;
导入java.io.FileInputStream;
导入java.io.FileOutputStream;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.List;
公共类MatchItemAdapter扩展了RecyclerView.Adapter{
私人名单;
私有最终上下文mContext;
公共MatchItemAdapter(上下文、列表项){
this.mContext=上下文;
this.mMatches=项目;
}
@凌驾
public MatchItemAdapter.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
LayoutFlater充气机=LayoutFlater.from(mContext);
视图项视图=充气机。充气(R.layout.list\u item\u match,parent,false);
ViewHolder ViewHolder=新的ViewHolder(项目视图);
返回视图持有者;
}
@凌驾
公共无效onBindViewHolder(最终匹配项Adapter.ViewHolder,int位置){
匹配=mMatches.get(位置);
试一试{
holder.tvName.setText(match.getMatchName());
holder.tvDate.setText(match.getMatchDate());
holder.imageView.findViewById(R.id.imageView);
holder.hiddenMatchId.setText(match.getMatchId());
holder.container.findViewById(R.id.list\u item\u container);
字体粗体=Typeface.create(“sanserif”,Typeface.bold);
SharedReferences SharedReferences=mContext.getSharedReferences(
MY_GLOBAL_PREFS,mContext.MODE_PRIVATE);
String currentMatchName=SharedReferences.getString(当前匹配名称,“当前匹配名称”);
String itemName=holder.tvName.getText().toString();
if(itemName.equals(currentMatchName)){
holder.tvName.setTypeface(粗体);
holder.container.setBackgroundColor(Color.parseColor(#a4a4a4”);
支架.tvName.setTextSize(24);
holder.matchIsActive=true;
SharedReferences.Editor Editor=mContext.getSharedReferences(MY_GLOBAL_PREFS,mContext.MODE_PRIVATE).edit();
putString(当前匹配ID,MATCH.getMatchId());
putString(当前匹配名称,MATCH.getMatchName());
putString(当前_MATCH_CLUB_ID,MATCH.getClubId());
putString(当前匹配日期,MATCH.getMatchDate());
putString(当前匹配级别,MATCH.getMatchLevel());
int喷丝头;
开关(match.getMatchLevel()){
案例“一”:
喷丝头位置=0;
打破
案例“二”:
喷丝头位置=1;
打破
案例“三”:
喷丝头位置=2;
打破
案例“四”:
喷丝头位置=3;
打破
违约:
喷丝头位置=0;
}
编辑:putInt(喷丝器的位置,喷丝器位置);
editor.apply();
}
}捕获(例外e){
e、 printStackTrace();
}
}
@凌驾
public int getItemCount(){
返回mMatches.size();
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder{
公共文本视图tvName;
公共文本查看日期;
公共影像视图;
公共文本视图hiddenMatchId;
公众视野容器;
布尔匹配激活=假;
公共视图持有者(最终视图项视图){
超级(项目视图);
tvName=(TextView)itemView.findViewById(R.id.match_name);
tvDate=(TextView)itemView.findViewById(R.id.match_date);
imageView=(imageView)itemView.findViewById(R.id.imageView);
hiddenMatchId=(TextView)itemView.findViewById(R.id.match\u id\u hidden);
container=(View)itemView.findviewbyd(R.id.list\u item\u container);
imageView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
final PopupMenu popup=新建PopupMenu(view.getContext(),imageView);
如果(!matchIsActive){
充气(R.menu.popup\u菜单,popup.getMenu());
setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){
@凌驾
公共布尔onMenuItemClick(菜单项){
开关(item.getItemId()){
案例
holder.imageView.setOnClickListener(...
Log.d("HEY, THIS IS CURRENT MATCH", mMatches.get(position));
...);
@Override
public void onClick(View v) {
        int pos = (int) v.getTag();
        Match matches = mMatches.get(pos);

}
holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) { .... } });
holder.container.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) { ... } });