2013-10-11 3 views
2

В настоящее время я разрабатываю приложение (возможно, вы ответили или видели некоторые другие вопросы) и у меня проблема с удобством использования. У меня есть ящик для навигации, и когда пользователь нажимает на один из элементов, другой фрагмент заменяет основной frame_content. Проблема, с которой я сталкиваюсь, заключается в том, что транзакция занимает некоторое время на моем devie.Увеличьте время загрузки фрагмента транзакций для приложений Android

Я нажимаю на один элемент в навигационном ящике, а затем приложение «stucks» в течение нескольких секунд и будет продолжать работать нормально.

Я также знаю, где проблема, потому что, когда я заменяю фрагмент, в котором нет данных, он работает мгновенно. Просто приложение должно отображать очень много данных. Я передаю HashMap<String, Collection<String>> фрагменту и читаю его там. Я сохраняю его в массиве, а затем я снова читаю этот массив в цикле for и показывая данные.

Я думал о различных других способах: чтение всех данных в основной деятельности, а затем передача нескольких массивов в фрагмент. но проблема в том, что мне нужно 13 массивов для каждого фрагмента, потому что хэш-карта содержит данные из 13 разных ключей. каждая клавиша имеет 1 значение. и всего 50 записей. Таким образом,

50 Записи содержат 13 ключей, содержащих 1 значение.

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

Я загружаю данные из XML с помощью AsyncTask во время загрузки заставки, а затем я сохраняю его в другой хэш (в зависимости от того, какой xml я загрузил). Затем я начинаю новое намерение по основной деятельности и передаю все хэш-карты. то в зависимости от списка ящиков навигации открывается новый фрагмент и хэш-карта передается в функцию в фрагменте. то данные считываются в массивы, и массив снова считывается в методе OnCreateView для добавления данных в макет.

Любые идеи по улучшению скорости? это то, как я в настоящее время изменить свои фрагменты

protected void onNavItemSelected(int id) { 
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
    ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right); 
    switch ((int) id) { 
    case 101: 
     MainFragment.passList(hashMap); 
     ft.replace(R.id.content_frame, new MainFragment()); 
     ft.commit(); 
     break; 
//further cases.... 

ответ

3

Может

ft.commit(); 
getSupportFragmentManager().executePendingTransactions(); 
break; 

поможет вам выполнить транзакцию быстрее (не забудьте вызвать его на основной нити)

http://developer.android.com/reference/android/app/FragmentManager.html#executePendingTransactions()

Или если проблема не в самой транзакции, может быть, это ваш цикл, который нуждается в улучшении?

+0

Я думаю, это моя петля. Поскольку, когда у меня есть только один элемент в цикле for, он загружается почти мгновенно. когда у меня всего 5, он быстро загружается, но когда у меня есть 50 (что мне нужно), это занимает слишком много времени. или я должен просто добавить 3, и когда пользователь прокручивает автозагрузку следующих данных? – Musterknabe

+0

Вы работаете со списком для своих товаров? – guikk

+0

У меня есть LinearLayout в ScrollView в RelativeLayout. Имейте LinearLayout в ScrollView, потому что у него может быть только один ребенок. Вы предложили бы использовать представление списка вместо линейного макета? – Musterknabe

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