2016-01-29 180 views
1

我試圖改變在列表視圖中顯示的值,這取決於seekbar的值。目前listview正在由遊標填充(whos值,我不認爲我可以在列表中更改一次)。我想在添加到列表之前將光標添加到ArrayList中。Android ArrayList更新值

我的想法是,我可以更改數組列表元素,並依次更新列表視圖。我遇到了創建數組列表的問題,然後改變它來更新列表視圖。

ListView中包含2個列(名稱和值),這些是什麼都被返回到光標並添加到該ArrayList。當seekbar值(例如2)時,arrayList中的所有值都將乘以2.它們只能在列表中而不是在數據庫中更新。

誰能幫我推在正確的方向來解決我的ArrayList和應用搜索條改變

光標和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 

       } 
+0

您可以創建和使用自定義適配器,而不是一個'SimpleCursorAdapter'。 – Titus

+0

會有什麼不同? – JJSmith

+0

你可以用一個'ArrayList'而不是'Cursor'工作的適配器,這樣你就可以從'ListView'中添加/刪除項目。 – Titus

回答

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; 
      } 
     } 
    } 
一些數據

更新 現在你有型的ArrayListItem's您可以到自定義適配器,你會做出這種提供,這裏是一個例子,如何做到這一點,你可以看看代碼Github

ListView listView = (ListView)findViewById(R.id."listview id from the layout"); 

使自定義Adapter並提供清單的是,和適配器設置爲listview

listView.setAdapter(adapter) 

現在你有興趣,當您更改搜索條的位置,你可以在東西從數組列表中獲取物品並更改所需的值

一旦更改了數組列表中的數據,請在適配器上調用notifyDataSetChanged()

adapter.notifyDataSetChanged(); 

和你做

+0

有趣的,所以如果我想改變測量的價值,我會在'setMeasurement'函數中這麼做?另外,我將如何將arrayList的所有值傳入新類?對不起,所有的問題,只是想確保我得到這個權利 – JJSmith

+0

@JJSmith,我已經更新了答案,我希望這可以幫助 –