我使用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慢速片段所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)