我有一个名为Player的自定义对象的ArrayList。 ArrayList显示在RecyclerView中 - 效果很好。我在每个TextView的RecyclerAdapter中添加了一个onClick,传递了我的ArrayList,点击的列和点击的行 - 工作也非常好。
我让用户输入此“单元格”的分数 - 并尝试更新我的ArrayList。 问题是,为ArrayList中的所有玩家设置了分数。 RecyclerView“正确”获取更新 - 每个玩家都有ArrayList中显示的分数。我究竟做错了什么? :/
public class Player{
String name;
int[] sections = new int[16];
public Player() {
super();
}
public Player(String name, int[] sections) {
super();
this.name = name;
this.sections = sections;
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getPoints(int section){
return sections[section];
}
public void setPoints(int section, int punkte){
this.sections[section] = punkte;
}
public int[] getAllPoints(){
return sections;
}
}
我在第二个活动的onCreate方法中创建了我的ArrayList spielerArrayList,从主活动中获取名称(ArrayList spielernamen):
public void getData() {
int[] foo = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
if (spielernamen != null) {
for (String spielername : spielernamen) {
spielerArrayList.add(new Player(spielername, foo));
}
} else {
Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
}
}
和我的方法中的一个代码段,名为onItemClick :(问题似乎在这里或在Player类中)
Player spieler = playerArrayList.get(column)
punkte = numberPicker.getValue();
spieler.setPoints(row, punkte);
playerArrayList.set(column, spieler);
问题似乎在于这一点。我很久以前得到了Player对象并设置了AlertDialog,如果这改变了我将发布整个代码的任何内容。 我也尝试了这个,但错误仍然存在 - 每个Player对象都获得输入的分数。
Player spieler = playerArrayList.get(column)
punkte = numberPicker.getValue();
int[] pointsarray = spieler.getAllPoints();
pointsarray[row] = punkte;
Player player = new Player(spieler.getName(), pointsarray);
playerArrayList.remove(column);
playerArrayList.add(column, player);
告诉我您是否需要更多代码或其他内容。 :)
答案 0 :(得分:0)
似乎所有Player对象都引用了同一个数组对象。因此,当您修改其中一个对象时,将修改所有对象。尝试初始化Player对象
public void getData() {
int[] foo = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
if (spielernamen != null) {
for (String spielername : spielernamen) {
// here, each Player object have same member array object foo
spielerArrayList.add(new Player(spielername, foo));
}
} else {
Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
}
}
修改为:
public void getData() {
if (spielernamen != null) {
for (String spielername : spielernamen) {
// here, each Player object have same member array object foo
int[] foo = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
spielerArrayList.add(new Player(spielername, foo));
}
} else {
Toast.makeText(this, "error", Toast.LENGTH_SHORT).show();
}
}