2016-06-11 3 views
1

notifyDataSetUpdate変更を呼び出すにはスピナー値を更新されていない)活動の私のスピナーアダプタこれはスピナーを初期化し、アダプタデータを設定する(OnCreate関数で呼び出されたというのが私のスピナー機能です

private void spinnerSetting() { 
    DataBaseOperations dataBaseOperations = new DataBaseOperations(this); 
    spinner = (Spinner) findViewById(R.id.volt_spinner_); 

    categories = dataBaseOperations.getInvertersType(); 
    // Creating adapter for spinner 
    dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories); 

    // Drop down layout style - list view with radio writeNfcBt 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // attaching data adapter to spinner 
    spinner.setAdapter(dataAdapter); 

    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      mkvValue = parent.getItemAtPosition(position).toString(); 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 

     } 
    }); 
} 

コードのこの作品から、私はボタンをクリックすると、それは私のリスト(カテゴリ)は、スピナーのアダプタにデータを提供する私はnotifyDataSetChange()が私のリスト(カテゴリ)が更新され、新しい値を持っていますが、値

List<Inverters> allData = inverter.getData(); 
DataBaseOperations dataBaseOperations = new DataBaseOperations(AdminPanelActivity.this); 
dataBaseOperations.addInvertersNames(allData); 
categories.clear(); 
//dataAdapter.clear(); 
categories = dataBaseOperations.getInvertersType(); 
dataAdapter.notifyDataSetChanged(); 
spinner.setAdapter(dataAdapter); 

答えて

1

アダプタでは、コンストラクタで渡されたリストへの参照が保持されます。

categories = dataBaseOperations.getInvertersType(); 
dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, categories); 

dataBaseOperations.getInvertersType()新しいArrayListにそれが呼び出されるたびに作成されていますが、アダプターはその内部リファレンスを変更しないdoest。
categories = dataBaseOperations.getInvertersType()を呼び出した後に変更が表示されないのは、その理由は、アダプタが認識できない新しいリストです。


あなたが代わりに行う必要があります。

List<Inverters> allData = inverter.getData(); 
DataBaseOperations dataBaseOperations = new DataBaseOperations(AdminPanelActivity.this); 
dataBaseOperations.addInvertersNames(allData); 
categories.clear(); 
categories.addAll(dataBaseOperations.getInvertersType()); 
dataAdapter.notifyDataSetChanged(); 
+0

を、それがスピナーを更新し、ない働いていない、それは私が新しいデータで再びアダプタをintializeた場合にのみです –

+0

が、私はnotifyDataSetChange()がない理由を知りたいです –

+0

新しい参照を作成するためです。 'dataAdapter = new ArrayAdapter (this、android.R.layout.simple_spinner_item、categories);を実行することもできます。 spinner.setAdapter(dataAdapter); 'データを更新しようとしているとき –

関連する問題