2012-04-21 2 views
1

Я сделал список для некоторых игр, и когда игра удалена, мне бы хотелось, чтобы она исчезла в списке. Я пытаюсь использовать 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; 
     } 

    }); 
} 

ответ

2
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

hmm, не работает: S Он просто использует переменную записей с первого раза и не использует обновленную версию. – gedemagt

+0

Теперь он работает. Спасибо! – gedemagt

0

вызов

final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.list_item,entry.getGameNames()); 
setListAdapter(adapter); 

Снова перед вызовом

adapter.notifyDataSetChanged(); 

Примечание: убедитесь, что вы изменили массив для изменения будут заметны.

+0

и как использовать создание адаптера каждый раз и каждый раз устанавливать новый адаптер. и если он сделает это, то что нужно вызвать notifyDataSetChanged() –

+0

, что бы я написал вместо «this»? Так как он внутри слушателя? – gedemagt

Смежные вопросы