标签菜单android - 不正确的调用片段

Posted

技术标签:

【中文标题】标签菜单android - 不正确的调用片段【英文标题】:Tabs menu android - not correct call fragments 【发布时间】:2018-04-27 21:22:35 【问题描述】:

大家好! 我的 TabMenu 有问题,下面我发布了一个 GIF,它显示了它是如何工作的,但它不能正常工作。 它在代码中的工作原理:

MainActivity(ViewPager, TabsLayout)->FragmnetAdapter(用于标签布局) 它必须是:“Home”(HomeFragment)、“History”(HistoryFragment)、“Places”(PlacesFragment) 现在,当它从 "Home" 开始时,开始 "Home" 但是 在“Hstory”上调用“History”,调用“Places” 但是在代码中我没有看到一些问题,请您帮帮我:) 这是代码:MainActivity:

public class MainActivity extends AppCompatActivity 

@BindView(R.id.appToolbarMainTabs)
Toolbar appToolbar;
@BindView(R.id.tabLayoutTabs)
TabLayout tabs;
@BindView(R.id.viewPager)
ViewPager viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ButterKnife.bind(this);
    setSupportActionBar(appToolbar);
    setupViewPager(viewPager);
    tabs.setupWithViewPager(viewPager);


// Add Fragments to Tabs
private void setupViewPager(ViewPager viewPager) 
    FragmentTabsAdapter adapter = new FragmentTabsAdapter(getSupportFragmentManager());
    adapter.addFragment(new HomeFragment(), getString(R.string.home_tab));
    adapter.addFragment(new HistoryFragment(), getString(R.string.history_tab));
    adapter.addFragment(new PlacesFragment(), getString(R.string.places_tab));
    viewPager.setAdapter(adapter);

片段适配器:

public class FragmentTabsAdapter  extends FragmentPagerAdapter 

private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();

public FragmentTabsAdapter(FragmentManager manager) 
    super(manager);


@Override
public Fragment getItem(int position) 
    return mFragmentList.get(position);


@Override
public int getCount() 
    return mFragmentList.size();


@Override
public CharSequence getPageTitle(int position) 
    return mFragmentTitleList.get(position);


public void addFragment(Fragment fragment, String title) 
    mFragmentList.add(fragment);
    mFragmentTitleList.add(title);

我认为不需要 Home&History&PlaceFragment 非常感谢!:)

【问题讨论】:

我假设在您的“PlacesFragment”中您正在显示 ProgressDialog? PagerAdapter 的工作方式是预加载可以滑动到下一个的片段,因此当您转到“HistoryFragment”时,它也会创建“PlacesFragment”。无论如何,ProgressDialog 是一种已弃用的行为模式,最好将 ProgressBar 内联在您的视图中,然后在加载完成后切换视图。 @AChez9 是的,你是对的,但我不想使用内联 ProgressBar,如果我理解正确,你会为它是 tabsMenu 的正确工作感到难过吗?我的代码没有问题吗? 【参考方案1】:

标签和 ViewPager 没问题,它总是至少预加载上一个和下一个片段。

您只能在显示片段并且仍在加载信息时显示对话框。

@Override
public void setUserVisibleHint(boolean isVisibleToUser) 
  super.setUserVisibleHint(isVisibleToUser);
  if (isVisibleToUser) 
    if (fragmentIsLoadingInfo())  // implement this
      showLoading(); // implement this
    
  

还可以检查 ViewPager 的 setOffscreenPageLimit 以了解正在发生的事情并更新此值,例如,如果您希望同时加载所有三个片段。遗憾的是,如果将其设置为 0,它仍然像 1 一样工作。

【讨论】:

谢谢哥们,明天我会试试的:)我会写新的信息!

以上是关于标签菜单android - 不正确的调用片段的主要内容,如果未能解决你的问题,请参考以下文章

片段android中的菜单项调用两次

android fragmentActivity 可以有意图吗?

Android中切换标签片段之间的延迟

Android - 多个视图或运行时片段替换​​?

android:来自片段的菜单项单击事件

Android片段中的EditText值不刷新