1

У меня возникла проблема с обновлением моего ListView. Я не хочу потерять свои данные ListView после первой инициализации. Я искал на этом сайте и некоторых других сайтах и ​​нашел различные решения. Наконец, я использовал приведенный ниже код, но я не получил никакого результата.Сохранение предыдущих элементов после списка обновления

private void handelpost(List<Posts> posts,Page pages) { 
    ListView listView; 
    final CustomListAdapterForPostOrgan adapter; 
    if (pages.getCurrentPage() > 1) { 

     listView = (ListView) findViewById(R.id.lv_for_post_organ); 
     adapter = new CustomListAdapterForPostOrgan(this, posts); 

     adapter.notifyDataSetChanged(); 
     listView.setAdapter(adapter); 

    } else { 

     listView = (ListView) findViewById(R.id.lv_for_post_organ); 
     adapter = new CustomListAdapterForPostOrgan(this, posts); 



     listView.setAdapter(adapter); 

    } 
} 
+0

Эти блоки кода отличается только notifyDataSetChanged, что бесполезно в этом случае. Не могли бы вы объяснить более подробную информацию? Не могли бы вы рассказать мне, почему вы используете здесь инициализацию адаптера? Вызывается ли этот метод только один раз? Или вы каждый раз воссоздаете адаптер? –

+0

У меня есть список, который получает 2 элемента в каждом соединении. Я хочу каждый раз загружать свой список, когда получаю новые данные, и в то же время я не хочу потерять свои предыдущие данные. Это мой первый раз, и у меня нет никакого опыта. Только это и не более подробно. Не могли бы вы помочь мне. –

ответ

1

Вы каждый раз создаете новый адаптер с новыми данными. Что не рекомендуется, когда вы работаете с разбиением на страницы. Вам необходимо сделать следующие изменения.

  1. Объявите ваш адаптер и список вид и ArrayList уровень класса.

    public class MyActivity extends Activity{ 
        private ListView mListView; 
        private CustomListAdapterForPostOrgan mAdapter; 
        private List<Posts> mPosts; 
    } 
    
  2. Инициализировать свой ArrayList, то адаптер, а затем установить его в качестве адаптера для ListView один раз в onCreate() из Activity.

    private void onCreate(Bundle savedInstanceState) { 
         super.onCreate(); 
    
         //After you've called setContentView() etc etc. 
         mPosts = new ArrayList(); 
         mListView = (ListView) findViewById(R.id.lv_for_post_organ); 
         mAdapter = new CustomListAdapterForPostOrgan(this, mPosts); 
         mListView.setAdapter(mAdapter); 
    } 
    
  3. При получении новых данных, сначала добавьте его в массив уровня класса, а затем вызвать notifyDataSetChanged() так:

    private void handelpost(List<Posts> posts,Page pages) { 
         //add new posts to existing array.. 
         mPosts.addAll(posts); 
         //since adapter already has your array, simply make it refresh. 
         mAdapter.notifyDataSetChanged(); 
    } 
    
+0

// Поскольку у адаптера уже есть ваш массив, просто запустите его. –

+0

Не могли бы вы подробнее рассказать об этом \t // поскольку у адаптера уже есть свой массив, просто запустите его. –

+0

Вы уже передали массив 'mPost' в адаптере при создании адаптера' CustomListAdapterForPostOrgan (это, mPosts); ' –