我正在尝试让几个微调器根据他们之前选择的微调器进行动态更改。我可以更新列表,但是当我使用 adapter.clear() 时它崩溃了。这是我的代码:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
public class CarKitsAct extends Activity{
ArrayAdapter<String> adMod, adEd;
String[] models, edition;
Boolean initSpMan = true;
Boolean initSpMod = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.carkitslayout);
// Construct TextViews
TextView textMan = (TextView) findViewById(R.id.textMan);
textMan.setText(R.string.selectmanufacturer);
TextView textMod = (TextView) findViewById(R.id.textMod);
textMod.setText(R.string.selectmodel);
TextView textEd = (TextView) findViewById(R.id.textEd);
textEd.setText(R.string.selectedition);
// Construct Spinners
Spinner spMan = (Spinner) findViewById(R.id.spMan);
Spinner spMod = (Spinner) findViewById(R.id.spMod);
Spinner spEd = (Spinner) findViewById(R.id.spEd);
// Construct Manufacturer Spinner Adapter
ArrayAdapter<CharSequence> adMan;
adMan = ArrayAdapter.createFromResource(this, R.array.cars, android.R.layout.simple_spinner_item);
adMan.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spMan.setAdapter(adMan);
// Set initial values for model and edition spinners
models = getResources().getStringArray(R.array.AC);
edition = getResources().getStringArray(R.array.ACAcceca);
//Construct adapters for models and editions
adMod = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, models);
adMod.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adMod.setNotifyOnChange(true);
spMod.setAdapter(adMod);
adEd = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, edition);
adEd.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adEd.setNotifyOnChange(true);
spEd.setAdapter(adEd);
// Set up listeners for item selection
spMan.setOnItemSelectedListener(new ManItemSelectedListener());
}
public class ManItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
if (initSpMan == true) {
initSpMan = false;
} else {
models = getResources().getStringArray(2130968577 + pos);
adMod.clear();
adMod.addAll(models);
adMod.notifyDataSetChanged();
}
}
public void onNothingSelected(AdapterView<?> parent) {}
}
}
如您所见,我尝试使用 bool 标志来确定微调器是否刚刚创建,但是当我更改选择时它会消失。
最佳答案
你可能得到一个 UnsupportedOperationException
, 正确的?这是因为适配器使用对象数组进行初始化,它在内部转换为 AbstractList
。 , 无法修改。
要解决您的问题,您只需提供实现 List<?>
的内容即可接口(interface)到适配器。示例:
String[] strings = getResources().getStringArray(R.array.cars);
List<String> items = new ArrayList<String>(Arrays.asList(strings));
ArrayAdapter<String> adMan = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items);
关于android - android 应用程序中的 adapter.clear,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10504353/