2017-12-27 132 views
3

我嘗試更新通過調用notifyDataSetChanged()微調視圖。但它沒有更新。下面安卓:微調沒有更新我的看法時notifyDataSetChanged()被調用

是我的活動:

public class DisplayArchive2 extends AppCompatActivity { 
    List<String> yearslist; 
    Spinner spinner; 
    ArrayAdapter<String> dataAdapter; 
    @Override 
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.archive2); 
     spinner = (Spinner) findViewById(R.id.year_spinner); 
     yearslist = new ArrayList<String>(); 
     yearslist.add("2017"); 
     yearslist.add("2016"); 
     yearslist.add("2015"); 
     yearslist.add("2014"); 
     yearslist.add("2013"); 

     dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,yearslist); 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner.setAdapter(dataAdapter); 
     spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       yearslist.clear(); 
       yearslist.add("2010"); 
       yearslist.add("2009"); 
       yearslist.add("2008"); 
       yearslist.add("2007"); 
       yearslist.add("2006"); 
       dataAdapter.notifyDataSetChanged(); 
      } 

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

      } 
     }); 

    } 
} 

年的名單並沒有改變在選擇任何一年。

它看起來像下面

enter image description here

+0

嘗試在數據集應該改變 – hornet2319

回答

0

試試這個使用dataAdapter2.setNotifyOnChange(true);其工作的罰款我測試我的設備

void setNotifyOnChange (boolean notifyOnChange)

控制是否該改變list (add(T)方法,addAll(Collection)addAll(Object[])insert(T, int)remove(T)clear()sort(Comparator))自動調用notifyDataSetChanged()。如果設置爲false,呼叫方必須手動呼叫notifyDataSetChanged()以使附件視圖中反映的更改。默認值爲true,並調用notifyDataSetChanged()將該標誌重置爲true。

CODE

List<String> yearslist; 
    Spinner spinner; 
    ArrayAdapter<String> dataAdapter2; 

    spinner = (Spinner) findViewById(R.id.year_spinner); 
     yearslist = new ArrayList<String>(); 
     yearslist.add("2017"); 
     yearslist.add("2016"); 
     yearslist.add("2015"); 
     yearslist.add("2014"); 
     yearslist.add("2013"); 



      dataAdapter2 = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,yearslist); 
      dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      spinner.setAdapter(dataAdapter2); 
      spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

      if (position == 0) { 

      } else { 
       yearslist.clear(); 
       yearslist.add("2010"); 
       yearslist.add("2009"); 
       yearslist.add("2008"); 
       yearslist.add("2007"); 
       yearslist.add("2006"); 
       dataAdapter2.setNotifyOnChange(true); 
       dataAdapter.notifyDataSetChanged(); 
      } 

     } 

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

     } 
    }); 
+0

所以,你有兩個適配器適配器重置爲微調?這看起來像一個哈克解決方案 – rafid059

+0

@ rafid059它只是一個適配器我frined –

+1

那麼這裏有一個錯字'dataAdapter.notifyDataSetChanged();' – rafid059

0

按我的理解。您正在通知onItemSelected()內的適配器。在Spinner適配器初始化的情況下,onItemSelected()將首次調用一次。因此,您在Spinner中獲得的名單永遠都是新名單(即2006-2010),而不是第一名(即2013-2017)。
因此,如果您確實通知了適配器上的其他操作,或者可能避免第一次撥打onItemSelected(),您的代碼將正常工作。

+0

我在另一個地方發現了這個問題。但在這裏它沒有問題。那也很混亂。有時它會在onItemSelected()中運行代碼,有時不運行。 –

+0

那麼,我仍然感到驚訝,你如何得到(2013-2017)在你的微調列表。我測試了你的代碼,並且它總是顯示新的列表,這是完美的文檔。 – ADM

+0

我正在使用Android 2.2.2和Android SDK版本23.0.1並且編譯SDK版本是API 23.我從文件>項目結構 –

相關問題