1

У меня есть следующий код, который должен удалить элемент, который щелкнули:ListView OnClick обновление очищает список

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
@Override 
public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
    String itemValue = (String) listView.getItemAtPosition(position); 
    email_addresses.remove(position); 

    String size = Integer.toString(email_addresses.size()); 
    Log.d("Size: ", size); 

    //listView = (ListView) findViewById(R.id.email_list); 
    //ArrayAdapter<String> adapter = new ArrayAdapter<>(getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1, email_addresses); 
    //listView.setAdapter(adapter); 
    ArrayAdapter<String> adapter = new ArrayAdapter<>(mainAppContext, android.R.layout.simple_list_item_1, android.R.id.text1, email_addresses); 
    ((ListView)parent).setAdapter(adapter); 
    parent.refreshDrawableState(); 
} 

При нажатии на элемент списка очищается и не отображается ничего. Размер является правильным значением, и список можно перестроить, но я не могу заставить этот код работать. Спасибо

+0

удалите последние 3 строки. Вместо этого попробуйте вызвать 'adapter.notifyDataSetChanged();'. 'adapter' определяется вне' setOnItemClickListener' –

ответ

2

Вместо того, чтобы создавать каждый новый адаптер каждый раз, подумали ли вы о том, чтобы просто сделать свой адаптер переменной-членом и вызвать notifyDataSetChanged?

ArrayAdapter<String> adapter = new ArrayAdapter<>(mainAppContext, android.R.layout.simple_list_item_1, android.R.id.text1, email_addresses); 
((ListView)parent).setAdapter(adapter); 

становится:

mAdapter.notifyDataSetChanged(); 
1

Определите свой список и адаптер, как немедленные переменные, а также Вы должны уведомить об этом адаптере для того, чтобы сделать исключение аффекта, Попробуйте это,

 listview.setOnItemClickListener(new OnItemClickListener() { 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      email_addresses.remove(position); 
      adapter .notifyDataSetChanged(); 
     } 
    });