Android ArrayList更新值

时间:2016-01-29 15:01:58

标签: java android xml listview arraylist

我正在尝试根据搜索栏中的值更改列表视图中显示的值。目前列表视图正在被光标填充(我认为我不能在列表中更改一次的值)。我想在将光标添加到列表之前将光标添加到ArrayList中。

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

示例 列表视图包含2列(名称和值),这些列是返回到游标并添加到arrayList中的列。当搜索栏处于值(例如2)时,arrayList中的所有值将乘以2.它们仅在列表中更新,而不是在数据库中更新。

任何人都可以帮我推动我正确的方向来修复我的arrayList并应用搜索栏更改

Cursor和ArrayList

        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);

搜索栏

        seekBar = (SeekBar) findViewById(R.id.servingSeek);
    textView = (TextView) findViewById(R.id.actualServing);
    // Initialize the textview with '0'
    textView.setText("Serving Size:" + seekBar.getProgress());
    seekBar.setOnSeekBarChangeListener(
            new SeekBar.OnSeekBarChangeListener() {
                int progress = 0;

                @Override
                public void onProgressChanged(SeekBar seekBar,
                                              int progresValue, boolean fromUser) {
                    progress = progresValue;
                    textView.setText("Serving Size:" + progress);
                    //alter cursor values

                    //update cursor

                }

1 个答案:

答案 0 :(得分:0)

@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;
            }
        }
    }
  

更新   既然您拥有类型为ArrayList的{​​{1}},您可以将其提供给您要制作的自定义适配器,以下是如何执行此操作的示例,您可以查看Github中的代码

Item's

制作自定义ListView listView = (ListView)findViewById(R.id."listview id from the layout"); 并提供您的列表,并将适配器设置为Adapter

listview

现在您感兴趣的事情,当您更改搜索栏位置时,您可以从arraylist获取项目并更改您想要的值

更改arraylist中的数据后,请在适配器上调用listView.setAdapter(adapter)

notifyDataSetChanged()

你完成了