2017-01-14 1 views
0

У меня есть список элементов в моей ShoppingListActivity.Сохранение элементов в списке при добавлении из другой активности

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

Мои ShoppingListActivity.class

public class ShoppingListActivity extends Activity { 

    private ListView mainListView ; 
    private ArrayAdapter<String> listAdapter ; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_shopping_list); 

     // Find the ListView resource. 
     mainListView = (ListView) findViewById(R.id.mainListView); 
     ArrayList<String> shoppingList = new ArrayList<String>(); 
     shoppingList.add(itemLookup()); 

     // Create ArrayAdapter using the shopping list. 
     listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, shoppingList); 

     // Set the ArrayAdapter as the ListView's adapter. 
     mainListView.setAdapter(listAdapter); 
    } 

    //Lookup item by ID 
    public String itemLookup() { 
     String itemName = ""; 
     Intent intent = getIntent(); 
     Bundle extras = intent.getExtras(); 
     if (intent != null) { 
      String itemId = extras.getString("BARCODE_ID"); 
      try { 
       itemName = ItemLookup.lookupById(itemId); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     return itemName; 
    } 

    @Override 
    public void onBackPressed() { 
     startActivity(new Intent(ShoppingListActivity.this, MainActivity.class)); 
    } 
} 

У меня есть чувство, что я должен положить мой add где-то в другом месте. Я уверен, что мне нужно передавать список туда и обратно в putExtra, но если это так, я должен это сделать, это нормально.

Как я могу убедиться, что список поддерживается между действиями?

ответ

1

В одну сторону вокруг вашей проблемы Singleton Pattern.

В вашем случае вы можете реализовать что-то вроде этого:

public class ShoppingListManager { 

    private static ShoppingListManager instance = new ShoppingListManager(); 

    private List<String> shoppingList; 

    public static ShoppingListManager getInstance() { 
     return instance; 
    } 

    public List<String> getShoppingList() { 
     return shoppingList; 
    } 

    // Make the constructor private so that this class cannot be instantiated 
    private ShoppingListManager(){ 
     shoppingList = new ArrayList<String>(); 
    } 
} 

Затем откройте его в любом месте вашего кода.

ShoppingListManager.getInstance().getShoppingList(); 

Одна точка помнить никогда магазин контекст в одноэлементных классов, поскольку это приведет к утечке памяти.

1

Сохранение структур данных в действии делает ваше приложение склонным к потере данных, поскольку действия могут быть уничтожены в разное время и по разным причинам, включая поворот устройства между портретом и ландшафтом.

Вы должны использовать отдельный класс для хранения и отслеживания, которые находятся в списке покупок. Активность с ListView должна только получить список сохраненных элементов и отобразить их. Все, что вызывает добавление элемента, должно просто вызвать перезагрузку списка (если действие выполняется на переднем плане), в противном случае действие должно увидеть этот новый элемент в любом случае при следующем запуске.

Если вам необходимо, чтобы ваши данные были постоянными после завершения вашего процесса, вы должны изучить возможный data storage options.

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