Android动态微调器更新

我正在使用Android和Spinners,我需要一些帮助。 我有一个创建两个微调器和一个按钮的类。 第一个微调器是我的类别,第二个是我的子类别。 我想要做的是动态更新第二个微调器(spinner2)。 我一直在尝试使用adapter2.clear(),但崩溃了android,错误“无法启动活动componentinfo不支持的操作”

这是我的代码:

public class MyClass extends MyBaseClass { int category; int sub_category; ArrayAdapter adapter2; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.quizes); //CATEGORY INFO final String[] items1 = new String[] {"One", "Two", "Three"}; final Spinner spinner1 = (Spinner) findViewById(R.id.spinner1); ArrayAdapter adapter1 = new ArrayAdapter(this, android.R.layout.simple_spinner_item, items1); adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(adapter1); //SUBCATEGORY INFO final String[] items2 = new String[] {"SOne", "STwo", "SThree"}; final Spinner spinner2 = (Spinner) findViewById(R.id.spinner2); adapter2 = new ArrayAdapter(this, android.R.layout.simple_spinner_item, items2); adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner2.setAdapter(adapter2); // Capture our button from layout Button button = (Button)findViewById(R.id.button1); // Register the onClick listener with the implementation above button.setOnClickListener(new OnClickListener() { public void onClick(View v) { // do something when the button is clicked startActivity(new Intent(MyClass.this, GoToOtherClass.class)); } }); //SELECTOR CONTROL FOR SPINNER1 {CATEGORY} spinner1.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { MyClass.this.category = spinner1.getSelectedItemPosition(); //OTHER STUFF } @Override public void onNothingSelected(AdapterView arg0) { } }); //SELECTOR CONTROL FOR SPINNER2 {SUB-CATEGORY} spinner2.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { MyClass.this.sub_category = spinner2.getSelectedItemPosition(); //OTHER STUFF } @Override public void onNothingSelected(AdapterView arg0) { } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); return true; } } 

我理解.clear()/。add()方法,但是当我尝试clear()/ add()我的程序崩溃时,我需要做什么才能解决问题所以我可以更改spinner2内容为我的子类别清单? 任何建议都会有所帮助,因为我花了几个小时做以下事情:

对象t = adapter2.getitem(0); spinner2.remove((String)t);

或者adapter2.clear()和其他一些技巧,我没有进一步的想法。 我还在学习android。 我已经尝试在stackoverflow和google上查看其他post,但不知道如何让他们的想法有效。

更改第二个Spinner的内容后,需要调用adapter2.notifyDataSetChanged() 。 如果没有该调用,UI将不会使用Spinner的新内容进行更新,并且您也可能在引用不再存在的内容时遇到问题。

试试这个代码..

 public class MainActivity extends Activity { Spinner sp1,sp2; ArrayAdapter adp1,adp2; List l1,l2; int pos; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); l1=new ArrayList(); l1.add("A"); l1.add("B"); sp1= (Spinner) findViewById(R.id.spinner1); sp2= (Spinner) findViewById(R.id.spinner2); adp1=new ArrayAdapter (this,android.R.layout.simple_dropdown_item_1line,l1); adp1.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); sp1.setAdapter(adp1); sp1.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub pos=arg2; add(); } private void add() { // TODO Auto-generated method stub Toast.makeText(getBaseContext(), ""+pos, Toast.LENGTH_SHORT).show(); switch(pos) { case 0: l2= new ArrayList(); l2.add("A 1"); l2.add("A 2"); adp2=new ArrayAdapter(MainActivity.this, android.R.layout.simple_dropdown_item_1line,l2); adp2.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); sp2.setAdapter(adp2); select(); break; case 1: l2= new ArrayList(); l2.add("B 1"); l2.add("B 2"); adp2=new ArrayAdapter(MainActivity.this, android.R.layout.simple_dropdown_item_1line,l2); adp2.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line); sp2.setAdapter(adp2); select(); break; } } private void select() { // TODO Auto-generated method stub sp2.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub Toast.makeText(getBaseContext(), "Test "+arg2, Toast.LENGTH_SHORT).show(); } @Override public void onNothingSelected(AdapterView arg0) { // TODO Auto-generated method stub } }); } @Override public void onNothingSelected(AdapterView arg0) { // TODO Auto-generated method stub } }); } }