自定义Android TabHost慢速片段

自定义Android TabHost慢速片段,第1张

概述我使用ActionbarSherlock和SlidingMenu.我的MainActivity不访问数据库,也没有解析任何问题.一切都是静止的.根据您从SlidingMenu中选择的“Section”动态生成选项卡.2点击后,应用程序变得非常慢.以下是我的主要观点.        <TabHostandroid:id="@andr

我使用ActionbarSherlock和SlIDingMenu.

我的MainActivity不访问数据库,也没有解析任何问题.一切都是静止的.

根据您从SlIDingMenu中选择的“Section”动态生成选项卡. 2点击后,应用程序变得非常慢.

以下是我的主要观点.
    
    

    <TabHost        androID:ID="@androID:ID/tabhost"        androID:layout_wIDth="match_parent"        androID:layout_height="match_parent" >        <linearLayout            androID:layout_wIDth="match_parent"            androID:layout_height="match_parent"            androID:orIEntation="vertical" >            <TabWidget                androID:ID="@androID:ID/tabs"                androID:layout_wIDth="match_parent"                androID:layout_height="wrap_content"                androID:orIEntation="horizontal" />            <FrameLayout                androID:ID="@+ID/content_frame"                androID:layout_wIDth="match_parent"                androID:layout_height="match_parent"                androID:layout_weight="1"                androID:background="#0000FF" >            </FrameLayout>            <FrameLayout                androID:ID="@androID:ID/tabcontent"                androID:layout_wIDth="0dp"                androID:layout_height="0dp" >            </FrameLayout>        </linearLayout>    </TabHost></linearLayout>

用于管理Tabhost&的代码碎片:

public voID selectPage(MenuPageItem page, Page subNavigationPage) {    if (page == null || subNavigationPage == null            || (page.equals(selectedPage) && subNavigationPage.equals(selectedSubNavigation))) {        return;    }    Log.d(TAG, "Show the page: " + page.getTitle() + " / subNavigationPage: " + subNavigationPage.getTitle());    boolean needUpdateTabUI = !(page.equals(selectedPage));    selectedPage = page;    selectedSubNavigation = subNavigationPage;    // 1) Manage tabHost    if (needUpdateTabUI) {        Log.d(TAG, "need to update tab layout");        updatePageTabUI();    }    // Change selected tab    mTabHost.setCurrentTabByTag(selectedSubNavigation.getTitle());    // 2) Change Contentfragment    Log.d(TAG, "update fragment");    // Todo: check the current fragment is not already the good one and just    // call its updateData method    updatePageFragment();    // Close the slIDing menu if opened    if (getSlIDingMenu().isShown()) {        Handler h = new Handler();        h.postDelayed(new Runnable() {            public voID run() {                getSlIDingMenu().showContent();            }        }, 50);    }}private voID updatePageTabUI() {    if (selectedPage.getPages().size() > 1) {        // More than one sub navigation -> show the tab host        // mTabHost.setVisibility(VIEw.VISIBLE);        mTabHost.setup();        mTabHost.clearallTabs();        int i = 0;        for (final Page subnav : selectedPage.getPages()) {            Log.d(TAG, "add tab tag=" + subnav.getTitle() + " title=" + subnav.getTitle());            mTabHost.addTab(mTabHost.newTabSpec(subnav.getTitle()).setIndicator(subnav.getTitle())                    .setContent(new EmptyTabFactory()));            mTabHost.getTabWidget().getChildAt(i).setonClickListener(new OnClickListener() {                @OverrIDe                public voID onClick(VIEw v) {                    selectPage(selectedPage, subnav);                }            });            i++;        }    } else {        // Only one sub navigation -> hIDe the tab host        // mTabHost.setVisibility(VIEw.GONE);        mTabHost.setup();        mTabHost.clearallTabs();    }    mTabHost.requestLayout();    mTabHost.invalIDate();}private voID updatePageFragment() {    try {        PageFragment fragContent = (PageFragment) selectedSubNavigation.getFragmentClass().newInstance();        fragContent.setSubNavigationPage(selectedSubNavigation);        FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction();        fragmentTransaction.replace(R.ID.content_frame, fragContent);        fragmentTransaction.commit();    } catch (InstantiationException e) {        e.printstacktrace();    } catch (illegalaccessexception e) {        e.printstacktrace();    }}

解决方法:

你把整个工作都放在了UIThread上,因此你最终偶然发现了慢响应(例如,这是为什么在最新的AndroID OS上禁止在UI线程上进行网络连接的原因之一).尝试稍微改变你的概念,并在不同的线程上在后台创建选项卡.或者至少在您完成工作时锁定UI和显示等待对话框,以便用户获得适当的UI体验.

希望这有助于并享受您的工作.

总结

以上是内存溢出为你收集整理的自定义Android TabHost慢速片段全部内容,希望文章能够帮你解决自定义Android TabHost慢速片段所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1117802.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存