Java Android ArrayList更新值

Java Android ArrayList更新值,java,android,xml,listview,arraylist,Java,Android,Xml,Listview,Arraylist,我正试图根据seekbar中的值更改listview中显示的值。当前,listview由一个光标填充(我认为列表中的who值不能更改一次)。我试图在将光标添加到列表之前将其添加到ArrayList中 我的想法是,我可以更改数组列表元素,然后更新listview。我在创建数组列表,然后修改它以更新列表视图时遇到问题 示例 listview包含两列(名称和值),它们是返回到游标并添加到arrayList中的内容。当seekbar为on值(如2)时,arrayList中的所有值都将乘以2。它们只能在列

我正试图根据seekbar中的值更改listview中显示的值。当前,listview由一个光标填充(我认为列表中的who值不能更改一次)。我试图在将光标添加到列表之前将其添加到ArrayList中

我的想法是,我可以更改数组列表元素,然后更新listview。我在创建数组列表,然后修改它以更新列表视图时遇到问题

示例 listview包含两列(名称和值),它们是返回到游标并添加到arrayList中的内容。当seekbar为on值(如2)时,arrayList中的所有值都将乘以2。它们只能在列表中更新,而不能在数据库中更新

有人能帮我找到正确的方向来修复arrayList并应用seekbar更改吗

光标和数组列表

        final Cursor ings = adapter.getIngs(Code);
    ingredients.moveToFirst();
    ArrayList<String> IngsList = new ArrayList<String>();
    while(!ings.isAfterLast())
    {
        Ings.add(ings.getString(ings.getColumnIndex("name")));
        Ings.add(ings.getInt(ings.getColumnIndex("measurement")));
        Ings.add(ings.getString(ings.getColumnIndex("unit")));
    }
    ings.close();


    String[] columns = new String[] {adapter.KEY_NAME, adapter.KEY_MEASUREMENT, adapter.KEY_UNIT};
    int[] to = new int[] {R.id.Name, R.id.Measurement, R.id.Unit};
    final SimpleCursorAdapter Adpater = new SimpleCursorAdapter(this,R.layout.row5, ingredients, ingredient_columns, to, 0);
    ListView Required = (ListView) findViewById(R.id.Required);
    Required.setAdapter(Adpater);

@JJSmith,如果您想在ArrayList中携带一些东西,最好创建一个类,用实例变量表示数据库中的一行,您需要这样的东西

class Item{
    private String name;
    private float measurment;
    private float unit;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getMeasurment() {
        return measurment;
    }

    public void setMeasurment(float measurment) {
        this.measurment = measurment;
    }

    public float getUnit() {
        return unit;
    }

    public void setUnit(float unit) {
        this.unit = unit;
    }
}
从光标读取数据时。。你需要实现这样的东西

    ArrayList<Item> items = new ArrayList<>();
    Cursor cursor = //make a call to database
    if (cursor.moveToFirst()) {
        Item item;
        for (int i = 0; i < cursor.getCount(); i++) {
            item = new Item();
            item.setName("read data from cursor and add it here"); 
            item.setMeasurment("read data from cursor and add it here"); 
            item.setUnit("read data from cursor and add it here"); 
            myModels.add(item);
            if (!cursor.moveToNext()) {
                break;
            }
        }
    }
制作一个自定义的
适配器
并提供您的列表,然后将适配器设置为
列表视图

listView.setAdapter(adapter)
现在您感兴趣的是,当您更改seekbar位置时,您可以从arraylist中获取项目的,并更改所需的值

更改arraylist中的数据后,在适配器上调用
notifyDataSetChanged()

adapter.notifyDataSetChanged();

您已经完成了

@JJSmith,如果您想在ArrayList中携带东西,最好创建一个类,用实例变量表示数据库中的一行,您想要这样的东西

class Item{
    private String name;
    private float measurment;
    private float unit;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getMeasurment() {
        return measurment;
    }

    public void setMeasurment(float measurment) {
        this.measurment = measurment;
    }

    public float getUnit() {
        return unit;
    }

    public void setUnit(float unit) {
        this.unit = unit;
    }
}
从光标读取数据时。。你需要实现这样的东西

    ArrayList<Item> items = new ArrayList<>();
    Cursor cursor = //make a call to database
    if (cursor.moveToFirst()) {
        Item item;
        for (int i = 0; i < cursor.getCount(); i++) {
            item = new Item();
            item.setName("read data from cursor and add it here"); 
            item.setMeasurment("read data from cursor and add it here"); 
            item.setUnit("read data from cursor and add it here"); 
            myModels.add(item);
            if (!cursor.moveToNext()) {
                break;
            }
        }
    }
制作一个自定义的
适配器
并提供您的列表,然后将适配器设置为
列表视图

listView.setAdapter(adapter)
现在您感兴趣的是,当您更改seekbar位置时,您可以从arraylist中获取项目的,并更改所需的值

更改arraylist中的数据后,在适配器上调用
notifyDataSetChanged()

adapter.notifyDataSetChanged();

完成后

您可以创建并使用自定义适配器,而不是
SimpleCorsOrAdapter
。这会有什么不同?您可以创建一个适配器,它与
ArrayList
一起工作,而不是
光标
,这样您就可以从
列表视图
中添加/删除项目。我可以编辑清单上的项目?我不想添加或删除任何内容是的,您可以使用自定义适配器来实现这一点。您可以创建和使用自定义适配器,而不是
SimpleCorsOrAdapter
。这会有什么区别?您可以使用
ArrayList
而不是
光标来创建和使用适配器,这样您就可以从
列表视图中添加/删除项目了。我是否可以要编辑列表中的项目吗?我不想添加或删除任何内容是的,您可以使用自定义适配器来完成。有趣的是,如果我想更改测量值,我只需要在
setMeasurement
函数中进行更改?另外,如何将arrayList的所有值传递到新类中?抱歉问了这么多问题,我只是想确定我明白了right@JJSmith,我已经更新了答案,我希望这有助于测试,因此如果我想更改测量值,我只需在
setMeasurement
函数中进行更改?另外,如何将arrayList的所有值传递到新类中?抱歉问了这么多问题,我只是想确定我明白了right@JJSmith,我已经更新了答案,希望这有帮助