当前位置: 首页 > 知识库问答 >
问题:

“错误”更新了自定义对象的ArrayList

顾骏祥
2023-03-14

我有一个名为Player的自定义对象的ArrayList。ArrayList显示在一个RecyclerView中--它工作得很好。我在RecolyerAdapter中为每个TextView添加了一个onClick,传递我的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);

如果你需要更多代码什么的告诉我。:)

共有1个答案

咸亦
2023-03-14

似乎所有的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();
    }
}
 类似资料:
  • javascript中是否有方法使运行时在错误消息中使用不同的对象表示。 典型的错误消息 如果我们可以为对象提供比更好的表示,那将很有帮助。在其他语言中,您可以通过覆盖使其打印更好的对象表示。 然而,在这种情况下,重写toString似乎没有效果。

  • 长话短说,我需要在我的标准联系人中更新一个自定义字段,该字段在更新一个不同的、不相关的自定义对象后触发。我曾试图编写一个触发器,将字段值从自定义对象传递给联系人,但我不断收到各种错误,其中最近的一个错误让我感到困惑。最终目标是从Passing\u Field\uu c更新Passing\uu c。 我收到了一个意外的标记:“(”for(Contact C:行)上的错误。它太简单了,我想不出来。 下

  • 我们可以创建一个新的自定义PDF运算符(如PDF运算符{BDC})和COSBase对象(如COSName{P}COSName{Prop1}(Prop1将再次引用一个obj))吗?并将这些添加到pdf的根结构中? 我从现有的pdf文档中阅读了一些解析器标记列表。我想标记pdf。在这个过程中,我将首先使用新创建的COSBase对象操作标记列表。最后我将它们添加到根树结构中。所以在这里我如何创建一个CO

  • 我正在努力找出如何使用Java流从对象值等于x的自定义对象列表中收集自定义对象。 这没有编译,但我不认为我离得很远--有人能指出我在哪里出错吗?

  • 问题内容: 说我的课很简单 我希望将此类s 的集合存储在People类的属性中,该属性是类型为Person的数组 也许我做到这一点如下 问题:请问我如何检查people.list是否包含实例alex? 我很想尝试的简单尝试 称一个错误 问题答案: 有两个功能: 编译器在抱怨是因为编译器知道不是,因此需要一个谓词,但不是谓词。 如果阵列中的人员是(不是),则可以使用: 由于它们不相等,因此可以将第二

  • 我遵循angular的官方指南,成功安装了初始服务人员。接下来,我想尝试一下更新行为,得到了一个 无法读取未定义的属性id 其中as id指ngsw-worker.js方法中的client.id 我做的步骤是 注册SW,离线并重新加载(工作),关闭标签,但保持窗口打开 app.cmp.html更新代码 重建项目(ng build--prod) 打开新的Tab和应用程序(可以观察SW更新) 重新加载