2014-09-25 3 views
0

Я использую Android Studio, и я создал Activity, который содержит NavigationDrawerFragment. Один из фрагментов - это загрузка содержимого базы данных SQLite внутри ListView с использованием настраиваемого массива ArrayAdapter со сложными элементами.Как сохранить содержимое ListView даже после изменения фрагмента через ящик

Моя проблема заключается в том, что если я выберу еще один фрагмент в ящике, вернитесь к нему, снова вызывается onCreate() из Fragment, так же как и onCreateView(), и база данных загружается еще раз.

Как я могу сохранить все, не загружая базу данных и не заполняя список еще раз?

У меня нет этой проблемы при изменении ориентации, поэтому я немного смущен. Может быть, это потому, что у меня есть макет как для портрета, так и для пейзажа?

вот код onCreateView()

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 

    getActivity().getActionBar().show(); 
    View view = inflater.inflate(R.layout.fragment_papers, container, false); 

     allItems = new ArrayList<ItemData>(); 

      getAllItemsFromDB(""); 


     mAdapter = new ItemsList(getActivity(), allItems, this, mDBApi); 

     // Set the adapter 

     mListView = (AbsListView) view.findViewById(R.id.list); 

     mListView.setAdapter(mAdapter); 


     // Set OnItemClickListener so we can be notified on item clicks 
     mListView.setOnItemClickListener(this); 
     mListView.setOnScrollListener(this); 

    return view; 
} 

и getAllItemsFromDB() содержит что-то вроде

public void getAllItemsFromDB(String query){ 

Cursor c = sqldb.rawQuery("SELECT * FROM 'Table' " + query, null); 

    while (c.moveToNext()) { 

     allItems.add(parseSQL(sqldb, c)); 


    } 

    c.close(); 

} 
+0

вы понять это @Myoch – Dan

ответ

0

может быть ур нагрузка frament каждый раз, как

FragmentManager fragmentManager = getFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.content_frame, new UrFragment()).commit(); 

Дон Не делайте этого, создайте экземпляр фрагмента и используйте его.

// update the main content by replacing fragments 
    Fragment fragment = new UrFragment(); 
    FragmentManager fragmentManager = getFragmentManager(); 
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); 
+0

Я уже использую второй вариант , Я проверил, и новый вызов Fragment() находится в методе onCreateView() для NavigationDrawer. И этот метод вызывается только один раз в начале приложения. – Myoch

+0

Функция «Не сохранять действия» включена в «Настройки» -> «Параметры разработчика». –

+0

Что такое Настройки -> Параметры разработчика? – Myoch

0

Установите список массива статическую

private static List<ItemData> allItems; 

Затем проверьте его на нуль и инициализируется только один раз

if(allItems == null) { 
    allItems = new ArrayList<ItemData>(); 
    getAllItemsFromDB(""); 
} 
+0

это нормально, если он изменяется, если содержимое изменяется с помощью действий пользователя? – Myoch

+0

Я думаю, что это – Misca

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