摘要:我确实有一个简单的应用程序(演示/原型),其中包含显示项目列表(这里是客户)的活动。这些项目是从应用程序 SQLite 数据库中检索的。我正在使用ContentProvider
带有LoaderManager
and的方法SimpleCursorAdapter
。我需要将用户的菜单项选择转换为选择的列表排序方式。这样做的通常方法是什么?应该如何保存用户选择以备将来使用?(我是Android编程的初学者。)
详细信息:在我的活动onCreate
方法中,fillData
调用该方法(参见下面的代码,从教程中学习)来填充列表。它调用getLoaderManager().initLoader(0, null, this);
, 进而导致调用onCreateLoader
返回CursorLoader
实例的 。游标加载器使用内容提供者并传递定义排序的参数。到目前为止,我使用固定参数对列表进行排序。我的猜测是我应该fillData();
在处理菜单项点击时调用。它应该导致创建另一个加载器和另一个适配器。但是信息应该如何传递给onCreateLoader
?
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.insert_customer: // this already works for me
createCustomer();
return true;
case R.id.customers_orderby_name_asc:
??? // What should be here?
fillData(); // I should probably call this.
return true:
case R.id.customers_orderby_name_desc:
???
fillData();
return true:
}
return super.onOptionsItemSelected(item);
}
...
private void fillData() {
String[] from = new String[] { CustomerTable.COLUMN_CODE,
CustomerTable.COLUMN_NAME,
CustomerTable.COLUMN_TOWN,
CustomerTable.COLUMN_STREET};
int[] to = new int[] { R.id.code, R.id.name, R.id.town, R.id.street };
getLoaderManager().initLoader(0, null, this);
adapter = new SimpleCursorAdapter(this,
R.layout.customer_row, null, from, to, 0);
setListAdapter(adapter);
}
// After initLoader()...
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
String[] projection = { CustomerTable.COLUMN_ID,
CustomerTable.COLUMN_CODE,
CustomerTable.COLUMN_NAME,
CustomerTable.COLUMN_STREET,
CustomerTable.COLUMN_TOWN };
CursorLoader cursorLoader = new CursorLoader(this,
DemoContentProvider.CUSTOMERS_CONTENT_URI, projection, null, null,
CustomerTable.COLUMN_NAME); // here fixed order by the column
return cursorLoader;
}