2017-12-27 131 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.我从文件>项目结构 –

相关问题