【发布时间】:2012-03-10 22:46:47
【问题描述】:
当列表中的项目被删除时,我正在尝试刷新我的视图。我目前正在尝试在 AsyncTask 的 onPostExecute 方法中刷新/重新加载视图。到目前为止,我尝试过的任何事情都没有奏效。这似乎是一项容易完成的任务。我的自定义适配器扩展了 BaseAdapter。我希望我缺少一些简单的东西。任何人都可以发光吗?
干杯。
public class ItemListActivity extends OrmLiteBaseListActivity<DatabaseHelper> {
private final String TAG = getClass().getSimpleName();
private DatabaseHelper dbHelper;
private ListView itemListView;
private ItemListAdapter listAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.itemslistactivity);
registerForContextMenu(getListView());
itemListView = getListView();
itemListView.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.listview_context_menu, menu);
}
});
listAdapter = new ItemListAdapter(getApplicationContext(), new ArrayList<Item>());
itemListView.setAdapter(listAdapter);
dbHelper = getHelper();
new SelectDataTask().execute(dbHelper);
}
public void add_OnClick(View v) {
Intent intent = new Intent();
intent.setClass(this, AddItemActivity.class);
startActivity(intent);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
Item b = (Item) listAdapter.getItem(info.position);
try {
switch (item.getItemId()) {
case R.id.remove_item:
dbHelper.getItemDao().deleteById(new Integer(b.id));
listAdapter.notifyDataSetChanged();
return true;
}
} catch (SQLException e) {
//FIXME
e.printStackTrace();
Log.e(TAG, e.getMessage());
}
return false;
}
private class SelectDataTask extends AsyncTask<DatabaseHelper, Void, List<Item>> {
private final ProgressDialog dialog = new ProgressDialog(
ItemListActivity.this);
// can use UI thread here
protected void onPreExecute() {
this.dialog.setMessage("Retreiving item data...");
this.dialog.show();
}
@Override
protected List<Item> doInBackground(DatabaseHelper... params) {
List<Item> l = null;
try {
Dao<Item, Integer> dao = params[0].getItemDao();
l = dao.queryForAll();
} catch (SQLException e) {
//TODO -- cleanup
e.printStackTrace();
Log.e(TAG, e.getMessage());
}
return l;
}
// can use UI thread here
@Override
protected void onPostExecute(List<Item> b) {
listAdapter = new MyListAdapter(getApplicationContext(), b);
itemListView.setAdapter(listAdapter);
//TODO -- none of this works
itemListView.invalidateViews();
listAdapter.notifyDataSetChanged();
if (this.dialog.isShowing()) {
this.dialog.dismiss();
}
}
}
【问题讨论】:
-
你能提供更多细节吗?会发生什么?
-
记录已成功从数据存储中删除,但 ui 从未更新。看来我错过了一步。我的自定义适配器中是否有一些我没有正确实现的东西?
-
抱歉,我对 Android 的了解不够,无法在没有更多细节的情况下回答这个问题。
-
老问题,但显示您的自定义适配器的代码,也许您使用两个数组差异
标签: android database listview ormlite