gpt4 book ai didi

android - 自定义 Android TabHost 慢 fragment

转载 作者:太空宇宙 更新时间:2023-11-03 10:23:12 26 4
gpt4 key购买 nike

我使用 ActionbarSherlock 和 SlidingMenu。

我的 MainActivity 不访问数据库,也不解析任何内容。一切都是静态的。

选项卡是根据您从滑动菜单中选择的“部分”动态生成的。单击 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 & Fragments的代码:

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 操作系统上禁止在 UI 线程上进行网络连接的原因之一)。尝试稍微改变您的概念,并在不同线程的后台创建选项卡。或者至少在您工作时锁定 UI 并显示等待对话框,以便用户获得适当的 UI 体验。

希望这对您有所帮助,祝您工作愉快。

关于android - 自定义 Android TabHost 慢 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16545655/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com