在Android中更新列表视图
问题描述:
我做了一些游戏的列表视图,当游戏被删除时,我希望它在列表视图中消失。我试图使用adapter.notifyDataSetChanged(),但我无法让它工作,你能帮助我吗?在Android中更新列表视图
public static final String MY_SETTINGS = "MySettings";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
DBHelpeR entry = new DBHelpeR(Loadmenu.this);
entry.open();
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item,entry.getGameNames());
setListAdapter(adapter);
entry.close();
ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setBackgroundResource(R.drawable.background);
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
lv.setOnItemLongClickListener(new OnItemLongClickListener(){
public boolean onItemLongClick(AdapterView<?> parent, final View view,
int position, long id) {
String gamename = ((TextView) view).getText().toString();
builder.setTitle("Slet " + gamename + "?");
builder.setItems(new CharSequence[]{"Slet"} , new DialogInterface.OnClickListener() {
// Click listener
public void onClick(DialogInterface dialog, int item) {
DBHelpeR entry = new DBHelpeR(Loadmenu.this);
entry.open();
int game_id = entry.getGameID(((TextView) view).getText().toString());
Log.d("load",Integer.toString(game_id));
entry.deleteGame(game_id);
entry.close();
adapter.notifyDataSetChanged();
}
});
builder.show();
return true;
}
});
}
答
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item,entry.getGameNames());
下面替换上述行:::
ArrayList<String> entries = entry.getGameNames();
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item,entries);
,当你删除刚才dcall下面再次两条线::
entries = entry.getGameNames();
adapter.notifyDataSetChanged();
更新::
再次调用adapter.notifyDataS etChanged();拨打以下行::
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.list_item, entry.getGameNames());
setListAdapter(adapter);
答
呼叫
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item,entry.getGameNames());
setListAdapter(adapter);
再次调用
adapter.notifyDataSetChanged();
注意前:确保你已经改变了数组的变化是明显的。
+0
以及每次创建适配器和每次设置新适配器的用途。如果他这样做,需要调用notifyDataSetChanged() – 2012-04-21 15:21:28
+0
我会写什么而不是'this'?由于它在Listener内部? – gedemagt 2012-04-21 21:50:10
嗯,不工作:S它只是从第一次使用条目变量,而不是使用更新版本。 – gedemagt 2012-04-21 21:49:01
现在它工作。谢谢! – gedemagt 2012-04-25 19:56:38