Android RecyclerView-从我的ViewHolder获取对象
我正在创建一个接受匹配对象列表的RecyclerView。我已经为listItem设置了onClickListener。我想在单击此listItem时将匹配设置为活动。如何在单击特定listItem时访问存储在该listItem中的Match对象 以下是我的RecyclerView适配器/视图持有者类: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
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) { ... } });