Android - 使用来自自定义 RecyclerView 适配器的 activity 吸气剂
Android - using activity getters from custom RecyclerView adapter
我有以下 类:
MatchActivity.java:
public void setDart1(int playerIndex, int points) {
getDart1().set(playerIndex, points);
}
public ArrayList<Integer> getDart1() {
return dart1;
}
public void setDart2(int playerIndex, int points) {
getDart2().set(playerIndex, points);
}
public ArrayList<Integer> getDart2() {
return dart2;
}
public void setDart3(int playerIndex, int points) {
getDart3().set(playerIndex, points);
}
public ArrayList<Integer> getDart3() {
return dart3;
}
MatchActivityPlayerAdapter.java:
package de.tkirchmann.myaveragev3;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import java.io.Serializable;
import java.util.List;
public class MatchActivityPlayerAdapter extends RecyclerView.Adapter<MatchActivityPlayerAdapter.MatchActivityPlayerRowViewHolder> {
private final List<Player> playerList;
private final Match match;
private Context context;
MatchActivityPlayerAdapter(List<Player> playerList, Match match) {
this.playerList = playerList;
this.match = match;
}
@NonNull
@Override
public MatchActivityPlayerAdapter.MatchActivityPlayerRowViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.match_activity_row_layout, parent, false);
return new MatchActivityPlayerRowViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MatchActivityPlayerAdapter.MatchActivityPlayerRowViewHolder holder, int position) {
final Player player = playerList.get(position);
MatchActivity matchActivity = new MatchActivity();
holder.nameTextView.setText(player.getPlayerName());
holder.pointsTextView.setText(matchActivity.getRemainingPoints().get(position));
holder.dart1.setText(matchActivity.getDart1().get(position));
holder.dart2.setText(matchActivity.getDart2().get(position));
holder.dart3.setText(matchActivity.getDart3().get(position));
holder.dartsCombined.setText(matchActivity.getDartsCombined().get(position));
/*holder.averageTextView.setText(matchActivity.getAverage().get(position));*/
}
@Override
public int getItemCount() {
return playerList.size();
}
class MatchActivityPlayerRowViewHolder extends RecyclerView.ViewHolder {
public TextView nameTextView, pointsTextView, averageTextView, dart1, dart2, dart3, dartsCombined;
public MatchActivityPlayerRowViewHolder(View playerRowView) {
super(playerRowView);
final ConstraintLayout playerRowRootLayout = playerRowView.findViewById(R.id.match_player_row_root_layout);
nameTextView = playerRowView.findViewById(R.id.name);
pointsTextView = playerRowView.findViewById(R.id.points);
averageTextView = playerRowView.findViewById(R.id.average);
dart1 = playerRowView.findViewById(R.id.dart1);
dart2 = playerRowView.findViewById(R.id.dart2);
dart3 = playerRowView.findViewById(R.id.dart3);
dartsCombined = playerRowView.findViewById(R.id.last_darts_combined);
}
}
}
在自定义适配器的 onBindViewHolder()
方法中,我想通过从我的 activity 获取列表中的值来设置我的视图的文本。但是我得到了一个 IndexOutOfBoundsException,所以我在调用 getters 时可能没有正确的 reference/context。
我怎样才能得到正确的 context/reference 到我的 activity?
你可以试试这个:
((YourActivityName) itemView.getContext()).getDart1();
其他吸气剂依此类推。您可以使用任何 public 方法。
我有以下 类:
MatchActivity.java:
public void setDart1(int playerIndex, int points) {
getDart1().set(playerIndex, points);
}
public ArrayList<Integer> getDart1() {
return dart1;
}
public void setDart2(int playerIndex, int points) {
getDart2().set(playerIndex, points);
}
public ArrayList<Integer> getDart2() {
return dart2;
}
public void setDart3(int playerIndex, int points) {
getDart3().set(playerIndex, points);
}
public ArrayList<Integer> getDart3() {
return dart3;
}
MatchActivityPlayerAdapter.java:
package de.tkirchmann.myaveragev3;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.constraintlayout.widget.ConstraintLayout;
import androidx.recyclerview.widget.RecyclerView;
import java.io.Serializable;
import java.util.List;
public class MatchActivityPlayerAdapter extends RecyclerView.Adapter<MatchActivityPlayerAdapter.MatchActivityPlayerRowViewHolder> {
private final List<Player> playerList;
private final Match match;
private Context context;
MatchActivityPlayerAdapter(List<Player> playerList, Match match) {
this.playerList = playerList;
this.match = match;
}
@NonNull
@Override
public MatchActivityPlayerAdapter.MatchActivityPlayerRowViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.match_activity_row_layout, parent, false);
return new MatchActivityPlayerRowViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MatchActivityPlayerAdapter.MatchActivityPlayerRowViewHolder holder, int position) {
final Player player = playerList.get(position);
MatchActivity matchActivity = new MatchActivity();
holder.nameTextView.setText(player.getPlayerName());
holder.pointsTextView.setText(matchActivity.getRemainingPoints().get(position));
holder.dart1.setText(matchActivity.getDart1().get(position));
holder.dart2.setText(matchActivity.getDart2().get(position));
holder.dart3.setText(matchActivity.getDart3().get(position));
holder.dartsCombined.setText(matchActivity.getDartsCombined().get(position));
/*holder.averageTextView.setText(matchActivity.getAverage().get(position));*/
}
@Override
public int getItemCount() {
return playerList.size();
}
class MatchActivityPlayerRowViewHolder extends RecyclerView.ViewHolder {
public TextView nameTextView, pointsTextView, averageTextView, dart1, dart2, dart3, dartsCombined;
public MatchActivityPlayerRowViewHolder(View playerRowView) {
super(playerRowView);
final ConstraintLayout playerRowRootLayout = playerRowView.findViewById(R.id.match_player_row_root_layout);
nameTextView = playerRowView.findViewById(R.id.name);
pointsTextView = playerRowView.findViewById(R.id.points);
averageTextView = playerRowView.findViewById(R.id.average);
dart1 = playerRowView.findViewById(R.id.dart1);
dart2 = playerRowView.findViewById(R.id.dart2);
dart3 = playerRowView.findViewById(R.id.dart3);
dartsCombined = playerRowView.findViewById(R.id.last_darts_combined);
}
}
}
在自定义适配器的 onBindViewHolder()
方法中,我想通过从我的 activity 获取列表中的值来设置我的视图的文本。但是我得到了一个 IndexOutOfBoundsException,所以我在调用 getters 时可能没有正确的 reference/context。
我怎样才能得到正确的 context/reference 到我的 activity?
你可以试试这个:
((YourActivityName) itemView.getContext()).getDart1();
其他吸气剂依此类推。您可以使用任何 public 方法。