在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); 
+0

嗯,不工作:S它只是从第一次使用条目变量,而不是使用更新版本。 – gedemagt 2012-04-21 21:49:01

+0

现在它工作。谢谢! – gedemagt 2012-04-25 19:56:38

呼叫

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