Внутри dialogFragment У меня есть viewPager с двумя страницами. Каждая страница содержит пользовательский адаптер. Один адаптер со списком прядильщиков, другой адаптер со списком EditTexts. ViewPager добавляет адаптеры в порядке.Почему мой ViewPager работает так медленно?
public class PageFragment extends Fragment {
...
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.pagefragment_newprod, null);
LinearLayout ll=(LinearLayout) view.findViewById(R.id.tvLL);
ListView listView=new ListView(getActivity());
ll.addView(listView);
if (pageNumber==0){
dropDownAdapter=new DropDownAdapter(getActivity(), fillListAdapter);
listView.setAdapter(dropDownAdapter);
} else if (pageNumber==1){
boxAdapter = new BoxAdapter(getActivity(), filledFields);
listView.setAdapter(boxAdapter);
}
return view;
}
}
Но он работает медленно! Текущий адаптер (я имею в виду на странице curren) создает представления каждые миллисекунды! Посмотрите на это:
public class BoxAdapter extends BaseAdapter{
...
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (view == null) {
view = lInflater.inflate(R.layout.addproduct_item, parent, false);
}
Log.d(LOG_TAG, "====As I said every milisecond...======");
EditText editText = (EditText) view.findViewById(R.id.addProductEditText);
editText.setText(p.value);
return view;
}
}
Даже когда я сфокусировал EditText, этот Log.d пишет сообщения каждые миллисекунды! Кроме того, работает адаптер на следующей странице. У меня есть другой Log.d на другом адаптере getView, и он работает, когда я использовал адаптер другой страницы!
Пожалуйста, помогите мне понять, что это неправильно ... (
Ознакомьтесь с шаблоном держателя Android (http://developer.android.com/training/improving-layouts/smooth-scrolling.html). Вы должны использовать его в своем «ViewPager». – moictab
Кроме того, использование фрагментов внутри viewPager занимает больше времени для создания, занимает больше памяти и сложнее отлаживать эти пользовательские представления (-> изменить страницы ViewPager на customView вместо фрагментов). Вы также можете заполнить свой список (создать адаптер, установить его) в asynctask. –
Недостаточно кода, чтобы выяснить, что не так. Скорее всего, у вас есть некоторый цикл (возможно, неопределенный), который добавляет данные в ваш адаптер списка, и это приводит к обширным вызовам notifyDatasetChanged() вашего адаптера. – mykolaj