我有兩個spinners,這樣我的第二個微調的變化,它可以根據第一微調選擇的項目提供選項。簡單?微調與子微調工作不正常
例如:如果我選擇「一」主微調,副微調應顯示「A1」的選項。如果我在主微調器中選擇'b',子微調器應該顯示'b1','b2'作爲選項。如果我在主微調器中選擇'c',子微調器應該顯示'c1','c2','c3'作爲選項。
我使用了一個名爲SearchableSpinner庫,但沒有關係,因爲它的工作原理就像Android的微調。
public class PostComplaint extends AppCompatActivity {
String[] problems_main = {"a","b","c"};
String[][] problems_sub = {{"a1"},{"b1","b2"},{"c1","c2","c3"}};
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_post_complaint);
spinner_main = (SearchableSpinner)findViewById(R.id.spinner_main);
spinner_sub = (SearchableSpinner) findViewById(R.id.spinner_sub);
ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, problems_main);
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_main.setAdapter(spinnerAdapter);
spinnerAdapter.notifyDataSetChanged();
spinner_main.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
setSubSpinner(position);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
Toast.makeText(PostComplaint.this, "Nothing selected", Toast.LENGTH_SHORT).show();
}
});
}
void setSubSpinner(int i){
String[] myArray = problems_sub[i]; //Note: problems_sub is a two dimensional array
ArrayAdapter<String> spinnerAdapter_sub = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, myArray);
spinnerAdapter_sub.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner_sub.setAdapter(spinnerAdapter_sub);
spinnerAdapter_sub.notifyDataSetChanged();
}
問題:無論項目I點擊首次主旋轉器,根據該副旋轉器被選擇。然後如果我改變主旋轉器,副旋轉器不會改變。
的問題是開放的建議。評論是否不可理解。
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
ArrayAdapter adapter = (ArrayAdapter) getAdapter();
if (null != adapter) {
if (_items.size() == 0) {
for (int i = 0; i < adapter.getCount(); i++) {
_items.add(adapter.getItem(i));
}
}
SearchableListDialog searchableListDialog = SearchableListDialog.newInstance
(_items);
searchableListDialog.setOnSearchableItemClickListener(this);
searchableListDialog.show(((Activity) _context).getFragmentManager(), "TAG");
}
}
return true;
}
僅在第一次你點擊子微調的條件if(_items.size() == 0)
爲真,因此它得到正確初始化你會:
試着用這首invalidateDataSet,然後再添加 –
@VivekMishra你的意思是'spinner_sub.invalidateDataSet()'? –
是的,因爲它的數據是根據舊的微調。你首先刪除那些數據,然後添加新的數據 –