2011-09-18 34 views
1

如何用我的新數組更新ArrayAdapter?我的adapter.notifyDataSetChanged()不起作用

Belwo是我的ArrayAdapter,添加了一個默認數組。

String[] array_spinner = new String[]{"Select your state."}; 
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this,android.R.layout.simple_spinner_item,array_spinner); 
adapter.setDropDownViewResource(R.layout.state_spinner_layout); 
Myspinner.setAdapter(adapter); 

現在我加載解析信息進入array_spinner_data一些JSON數據,我想打電話給notifyDataSetChanged()

array_spinner = new String[]jsonArray.length(); 


     for (int i=0; i<jsonArray.length(); i++) 
     { 
      String styleValue = jsonArray.getJSONArray(i).getString(0);  
      Log.d(TAG, styleValue); 
      array_spinner[i] = styleValue; 

     } 
     Log.d(TAG, String.valueOf(array_spinner.length)); 
     adapter.notifyDataSetChanged(); 

我沒有看到任何錯誤,我所有的Log.d的來了回到他們應該。但是,當我點擊我的微調,所有顯示的是原始的Select your state我省略了一些基本的onCreate和Json加載的東西,但如果有人需要看到它,請讓我知道。

+0

您正在將數據放入'array_spinner'不'spinner_data' – Ronnie

+0

那是我的錯,他們都應該是array_spinner我測試的東西。 – Denoteone

回答

9

notifyDataSetChanged由於您沒有更改數據集,您正在創建一個新的副本,即適配器不知道的副本,因此「不能正常工作」。使用List<>而不是陣列,並修改相同的列表對象,您傳遞給您的適配器,它將工作。如果您想保留當前的代碼,那麼您必須在新數據集上創建一個新適配器並將其應用於您的微調器。

+0

它指示它說notifyDataSetChanged告訴適配器數據已更改並刷新。如果我正在改變數組值不算作一個改變? – Denoteone

+0

@Denoteone:因爲你沒有改變數組值,所以你正在改變適配器甚至不知道的另一個不同陣列中的值。 –

+0

我明白了。有沒有辦法與我的代碼上面讓我們說不使用List?非常感謝+1 – Denoteone

0

不創建一個新的列表, 清除現有的列表,然後調用notifydatasetchanged

someArrayList.clear(); 
someArrayList.add("element 1"); 
someArrayList.add("element 2"); 
yourAdapter.notifyDataSetChanged(); 
0
  • 首先創建一個列表
  • 之前,新的價值,每次刷新列表,你必須清除現有值a
  • 最後使用您的DataAdapter.notifyDatachanged()。功能

    private Spinner spinnerTest; 
    ArrayList<String> list_spinnerTest = new ArrayList<String>(); 
    
    list_spinnerTest.clear(); 
    
    String[] NameArray=new String []{"Load From Array","bbbbbbbb","cccccccccc","ddddddddd","eeeeeeeeee"}; 
    int count=5; 
    for (int i = 0; i < count; i++) { 
        list_spinnerTest.add(NameArray[i]); 
    } 
    ArrayAdapter<String> dataAdapterSpinner=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,list_spinnerTest); 
    dataAdapterSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinnerTest.setAdapter(dataAdapterSpinner); 
    
    dataAdapterSpinner.notifyDataSetChanged();