2015-03-18 1 views
0

Основное действие имеет кнопка «To ListView», которая запускает новое действие со списком. Каждый раз, когда этот новый актив загружается, он вызывает метод AsyncTask(), который извлекает некоторый JSON удаленно, анализирует его и привязывает данные к списку. Затем вызывается setContentView()onPostExecute()) для отображения пользовательского интерфейса. Как сохранить данные вида списка или, по крайней мере, массив данных (для перезаписи) при последующих запусках этого действия, чтобы ASyncTask() не нужно было вызывать каждый раз?Сохранение ListView при последующих запусках активности

ASyncTask() следует вызывать только в начале (и только до тех пор, пока приложение не будет принудительно завершено), последующие вызовы должны выполняться вручную пользователем, возможно, с событием onClick(). Я попытался установить boolean для этой цели, но если да, то как отобразить предыдущее состояние списка, когда boolean является ложным? Я также рассмотрел onResume() и onBackPressed(), но они, похоже, не очень актуальны.

Main.java:

toListView.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Intent myIntent = new Intent(getApplicationContext(), ListView.class); 
      startActivity(myIntent); 
     } 
    }); 

ListView.java:

public class ListView extends ActionBarActivity { 
private static boolean isFirstLaunch = true; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 

    if (isFirstLaunch) { 
     // execute the ASyncTask(); 
     isFirstLaunch = false; 
    } 
    // else display previous listview data or last activity state 
}// onCreate() 
+0

Почему бы не сохранить последние данные списка в SharedPreferences? – bwegs

+0

@bwegs SharedPreferences не принимает массивы, плюс мой - один из 'SpannedString'. –

+0

См. Http://stackoverflow.com/a/7057858/745750 – bwegs

ответ

1

Для сохраняющихся данных в Android приложения, у вас есть два очевидных варианта.

  • Использование базы данных SQLite. Эта альтернатива хороша, если у вас достаточно данных для управления, сортировки и обслуживания. Например, если ваш ответ JSON содержит много данных, сохранение его в базе данных было бы хорошим решением. Затем вы просто будете запрашивать базу данных, а не повторно запускать AsyncTask. Vogella предоставляет an excellent tutorial по этому вопросу.
  • Использование SharedPerefences. Эта альтернатива лучше, если у вас есть только пара переменных. Сохранение данных в SharedPreferences освобождает вас от работы, необходимой для разработки и внедрения поддержки базы данных для вашего приложения. См. Официальную документацию для справки.
+0

Можно ли просто восстановить предыдущее состояние ListView, а не сохранять и загружать данные из базы данных? Я просто хочу нажать «назад», чтобы вернуться к «main», а затем вернуться к списку, и все остальное будет по-прежнему с прошлого раза. Потому что сейчас кажется, что активность ListView уничтожается каждый раз, когда я ее оставляю. –

+0

К сожалению, когда вы уничтожаете свою деятельность, вам придется как-то упорствовать в своих данных, как описано в разделе [сохранение/восстановление состояния активности] (http://developer.android.com/training/basics/activity-lifecycle/recreating .html # SaveState). В вашем случае я не думаю, что было бы слишком большой проблемой, чтобы сохранить «массив данных» в SharedPreferences, а затем загрузить его, когда вы возобновите действие. @Chauduyphanvu – Marcus

+0

Спасибо за вашу помощь, @Marcus. Я закончил переназначение данных из адаптера и настроил внешний прослушиватель onClick. Ничего не было уничтожено - я знал, что данные в адаптере все еще активны, просто я не перепроверял, поэтому ничего не показывалось! –

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