gpt4 book ai didi

java - 在抽屉导航 fragment 之间切换很慢

转载 作者:行者123 更新时间:2023-12-01 14:29:02 27 4
gpt4 key购买 nike

我有一个带有抽屉导航的应用程序,它为每个菜单项使用 fragment 。
每次单击一个项目时,我都会替换当前 fragment 。

问题是用户点击后显示新的fragment时间过长,卡住了。加载时间最长的 fragment 是一个 fragment ,其中还包含带有子 fragment 的选项卡(一个 fragment 包含一个 RecyclerView)。
有什么办法可以加快 fragment 的加载速度吗? (也许事先初始化它们,如果可能的话?)

这是我的代码:

protected override void OnCreate(Bundle bundle)
{
drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
drawerLayout.DrawerClosed += DrawerLayout_DrawerClosed;


navigationView.NavigationItemSelected += (sender, e) =>
{
e.MenuItem.SetChecked(true);
//react to click here and swap fragments or navigate

switch (e.MenuItem.ItemId)
{
case (Resource.Id.nav_home):
ListItemClicked(0);
break;

case (Resource.Id.nav_halachot):
ListItemClicked(1);
break;

case (Resource.Id.nav_times):
ListItemClicked(2);
break;

case (Resource.Id.nav_siddur):
ListItemClicked(3);
break;
case (Resource.Id.nav_compass):
ListItemClicked(4);
break;

case (Resource.Id.nav_settings):
ListItemClicked(5);
break;
}


drawerLayout.CloseDrawers();
};

if (bundle == null)
{
ListItemClicked(0);
navigationView.Menu.GetItem(0).SetChecked(true);
fragment = new HomeFragment();
SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.content_frame, fragment)
.Commit();
}
}

public override void OnBackPressed()
{

if (drawerLayout.IsDrawerOpen((int)GravityFlags.Start))
{
drawerLayout.CloseDrawer((int)GravityFlags.Start);
}
else
{
base.OnBackPressed();
}
}

private void ListItemClicked(int position)
{

switch (position)
{
case 0:
fragment = new HomeFragment();
Title = "Home";
SupportActionBar.Elevation = 8;
break;
case 1:
fragment = new HalachaFragment();
Title = "aaa";
SupportActionBar.Elevation = 0;
break;
case 2:
fragment = new TimesFragment();
Title = "bbb";
SupportActionBar.Elevation = 8;

break;
case 3:
fragment = new SiddurFragment();
Title = "ccc";
SupportActionBar.Elevation = 8;
break;
case 4:
fragment = new CompassFragment();
Title = "ddd";
SupportActionBar.Elevation = 8;
break;
case 5:
fragment = new SettingsFragment();
Title = "eee";
break;
}



}

private void DrawerLayout_DrawerClosed(object sender, DrawerLayout.DrawerClosedEventArgs e)
{
SupportFragmentManager.BeginTransaction()
.Replace(Resource.Id.content_frame, fragment).AddToBackStack("BACK")
.Commit();

}

HalachaFragment.cs(包含选项卡的 fragment ):

public class HalachaFragment : Fragment
{
private ViewPager halachotPager;
private PagerSlidingTabStrip tabs;

public HalachaFragment()
{
this.RetainInstance = true;
}
public override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);

// Create your fragment here
}

public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment

var view = inflater.Inflate(Resource.Layout.HalachaSection, container, false);

var fragments = new Android.Support.V4.App.Fragment[]
{
new HalachotFragment(),
new BooksFragment(),
};

var titles = CharSequence.ArrayFromStringArray(new[]
{
"הלכות",
"ספרים",
});

halachotPager = view.FindViewById<ViewPager>(Resource.Id.halachotPager);

halachotPager.Adapter = new TabsFragmentPagerAdapter(this.ChildFragmentManager, fragments, titles);
halachotPager.OffscreenPageLimit = 2;
halachotPager.SetCurrentItem(1, true);
// Bind the tabs to the ViewPager
tabs = view.FindViewById<PagerSlidingTabStrip>(Resource.Id.halachotTabs);

tabs.SetViewPager(halachotPager);

return view;

}
}

希望有人能帮助我。

谢谢。

最佳答案

参见 this解决方案。只需使用一个线程来加载 fragment 子项。当更改您的 onItemClick 时。

layoutDrawer.closeDrawer(linearDrawer);
setLastPosition(posicao);
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
setFragmentList(lastPosition);
}
}, 0);

关于java - 在抽屉导航 fragment 之间切换很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37568175/

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