在标签之间滑动时滞后?

时间:2013-08-03 14:23:47

标签: android listview android-tabs smoothing

我正在tabs中实施activity。 我有5个标签,每个标签都包含listview(我通过asynctask获取listview的内容)enter image description here

那是图像:

现在代码:

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得到结果并解析它们。稍后我通过imageloader解析图像。 为什么它滞后? 特别是当我从LG改为HTC时。 (即使有应用程序有时关闭!)。 谢谢你的帮助将不胜感激:)

更新:所有标签都使用相同的布局文件。

CODES:

<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" />

请帮助。

1 个答案:

答案 0 :(得分:6)

当您使用许多列表视图时,有多种原因会降低您的性能。

  1. 您如何使用适配器,例如:在不使用回收转换视图的情况下对新视图进行充气。
  2. 列表项上的布局XML声明不正确,例如:使用非常复杂的布局。
  3. 如果您每次刷页时都进行刷新,ViewPager.setOffscreenPageLimit(int limit)可以在消耗更多内存时阻止重新加载。
  4. 如果你说你的应用程序关闭了,你应该有一些堆栈跟踪可用,发布它可以帮助我们识别错误。