Задержки при прокрутке между вкладками?

Я реализую tabs в своем activity. У меня есть 5 вкладок, и каждая вкладка содержит listview (я получаю содержимое списка через асинтаск) введите здесь описание изображения

Это изображение:

Теперь коды:

mViewPager
            .setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
                @Override
                public void onPageSelected(int position) {
                    ab.setSelectedNavigationItem(position);
                }
            });
    this.getSherlockActivity().getSupportActionBar().removeAllTabs();

    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    com.actionbarsherlock.app.ActionBar.Tab tab1 = ab
            .newTab()
            .setText("Samsung")
            .setTabListener(
                    new TabListener<SamsungLB>(this.getSherlockActivity(),
                            "tabone", SamsungLB.class));

    com.actionbarsherlock.app.ActionBar.Tab tab2 = ab
            .newTab()
            .setText("HTC")
            .setTabListener(
                    new TabListener<HTCLB>(this.getSherlockActivity(),
                            "tabtwo", HTCLB.class));
    com.actionbarsherlock.app.ActionBar.Tab tab3 = ab
            .newTab()
            .setText("LG")
            .setTabListener(
                    new TabListener<LGLB>(this.getSherlockActivity(),
                            "tabthree", LGLB.class));
    com.actionbarsherlock.app.ActionBar.Tab tab4 = ab
            .newTab()
            .setText("Sony")
            .setTabListener(
                    new TabListener<SonyLB>(this.getSherlockActivity(),
                            "tabfour", SonyLB.class));
    com.actionbarsherlock.app.ActionBar.Tab tab5 = ab
            .newTab()
            .setText("Search")
            .setTabListener(
                    new TabListener<SearchLB>(this.getSherlockActivity(),
                            "tabfive", SearchLB.class));
    ab.addTab(tab1);
    ab.addTab(tab2);
    ab.addTab(tab3);
    ab.addTab(tab4);
    ab.addTab(tab5);

    return rootView;
}

    @SuppressLint("NewApi")
        public static class TabListener<T extends SherlockFragment> implements
                ActionBar.TabListener {
            private Fragment mFragment;
            private final Activity mActivity;
            private final String mTag;
            private final Class<T> mClass;

            public TabListener(Activity activity, String tag, Class<T> clz) {
                mActivity = activity;
                mTag = tag;
                mClass = clz;
            }

            public void onTabSelected(Tab tab, FragmentTransaction ft) {
                if (mFragment == null) {
                    mFragment = Fragment.instantiate(mActivity, mClass.getName());
                    ft.add(android.R.id.content, mFragment, mTag);
                } else {
                    ft.attach(mFragment);
                }
            }

            public void onTabUnselected(Tab tab, FragmentTransaction ft) {
                if (mFragment != null) {
                    ft.detach(mFragment);
                }
            }

            public void onTabReselected(Tab tab, FragmentTransaction ft) {
            }

            public void onTabReselected(Tab arg0,
                    android.app.FragmentTransaction arg1) {

            }

            @SuppressLint("NewApi")
            public void onTabSelected(Tab arg0, android.app.FragmentTransaction arg1) {

                mViewPager.setCurrentItem(arg0.getPosition());
            }

            public void onTabUnselected(Tab arg0,
                    android.app.FragmentTransaction arg1) {

            }

            @Override
            public void onTabSelected(com.actionbarsherlock.app.ActionBar.Tab tab,
                    FragmentTransaction ft) {
                // TODO Auto-generated method stub
                mViewPager.setCurrentItem(tab.getPosition());
            }

            @Override
            public void onTabUnselected(
                    com.actionbarsherlock.app.ActionBar.Tab tab,
                    FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }

            @Override
            public void onTabReselected(
                    com.actionbarsherlock.app.ActionBar.Tab tab,
                    FragmentTransaction ft) {
                // TODO Auto-generated method stub

            }
        }

По сути, на каждой вкладке есть список, который заполняется через AsyncTask. я получаю результаты через JSON и анализирую их. позже я анализирую изображения через загрузчик изображений. Почему отстает??? Особенно когда я перехожу с LG на HTC. (Даже там приложение иногда закрывается!). спасибо ваша помощь будет оценена :)

ОБНОВЛЕНИЕ: все вкладки используют один и тот же файл макета.

КОДЫ:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/listview1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:drawSelectorOnTop="false" />

Пожалуйста, помогите.


person Community    schedule 03.08.2013    source источник


Ответы (1)


Поскольку вы используете много списков, существует множество причин, которые могут снизить производительность.

  1. Как вы используете адаптер, например: раздувание нового представления без использования переработанного преобразования.
  2. Неверная XML-декларация макета для элемента списка, например: использование очень сложного макета.
  3. Если вы выполняете обновление каждый раз, когда пролистываете страницу, ViewPager.setOffscreenPageLimit(int limit) может предотвратить перезагрузку, потребляя больше памяти.

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

person Chor Wai Chun    schedule 03.08.2013
comment
О 3 выборе. да, я заметил, что каждый раз, когда я прокручиваю, активность автоматически обновляется, даже если я не запрограммировал это поведение. @Chor WaiChun Посмотрим, сработает ли это: D - person ; 03.08.2013
comment
ОГРОМНОЕ СПАСИБО! ОНО РАБОТАЛО ЗАВОРАЖИВАЮЩЕ - person ; 03.08.2013
comment
У меня проблема, не относящаяся к этой теме. Когда я переключаюсь между фрагментами, а затем возвращаюсь к этому фрагменту, на вкладках не отображается список, но он не падает. Даже иногда я свайпаю вправо, и селектор работает неправильно. Что я могу сделать ? - person ; 03.08.2013
comment
Я считаю, что причина, скорее всего, в фрагменте onresume или onpause, это происходит только на определенной странице? или все страницы? - person Chor Wai Chun; 04.08.2013
comment
Не могу помочь вам, не глядя на ваши коды, если вы собираетесь открыть другую ветку по этому поводу, вы можете связать меня с ней, на данном этапе мало что могу сказать. - person Chor Wai Chun; 04.08.2013
comment