【问题标题】:Tabs menu android - not correct call fragments标签菜单android - 不正确的调用片段
【发布时间】: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 的正确工作感到难过吗?我的代码没有问题吗?

标签: android android-fragments android-viewpager android-tabs android-tablelayout


【解决方案1】:

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

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

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

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

【讨论】:

  • 谢谢哥们,明天我会试试的:)我会写新的信息!
猜你喜欢
  • 2015-11-25
  • 2023-03-07
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多