У меня есть ListActivity, в верхней части которой я хочу, чтобы спиннер позволял пользователю выбирать, что именно должен отображать ListView.
В методе onCreate я создаю свой первый курсор и вызываю startManagingCursor ().Я также создаю пользовательский CursorAdapter, отвечающий за рендеринг вида.
То, что я хочу знать, - это правильный способ изменить курсор, когда пользователь выбирает элемент в счетчике фильтра.
Что я делаю, так это добавляю OnItemSelectedListener к счетчику и внутри метода onItemSelected () я создаю новый Cursor, затем новый CursorAdapter и затем вызываю
stopManagingCursor (currentCursor);currentCursor = newCursor;startManagingCursor (currentCursor);setListAdapter (newAdapter);
Это подходящий способ сделать это?Как еще / можно мне это сделать?Я что-то забыл?Это уродливо?
Вот код:
public class MyListActivity extends ListActivity {
private Spinner typeFilterSpinner;
private MyListAdapter cursorAdapter;
private Cursor currentCursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.my_layout);
typeFilterSpinner = (Spinner) findViewById(R.id.TypeFilterSpinner);
typeFilterSpinner.setOnItemSelectedListener(new SpinnerItemSelectedListener());
currentCursor = MyDAO.getInstance().getMyCursor(null);
startManagingCursor(currentCursor);
cursorAdapter = new SelectionListAdapter(this, currentCursor);
setListAdapter(cursorAdapter);
}
class SelectionListAdapter extends CursorAdapter {
public FavouriteLocationSelectionListAdapter(Context context, Cursor cursor){
super(context, cursor, true);
[....] other initialization stuff here
}
[....] overriden rendering methods here
}
public class SpinnerItemSelectedListener implements OnItemSelectedListener {
public void onItemSelected(AdapterView<?> parent,View view, int pos, long id) {
Long mi = spinnerItems.get(pos);
Cursor newCursor = MyDAO.getInstance().getMyCursor(mi);
//TODO maybe call setCursor on the adapter here instead of instanciating a new cursor
SelectionListAdapter newAdapter =
new SelectionListAdapter(MyListActivity.this, newCursor);
stopManagingCursor(currentCursor);
currentCursor = newCursor;
startManagingCursor(currentCursor);
setListAdapter(newAdapter);
}
public void onNothingSelected(AdapterView parent) {
// woooork ?
}
}
}
Вот идея.
Спасибо за помощь!