当前位置: 首页 > 知识库问答 >
问题:

如何防止在Android中TabLayout中刷标签时,每次从服务器上加载数据的碎片?

姚新霁
2023-03-14

制表活动

public class TabActivity extends AppCompatActivity {
ViewPager viewpager;
Toolbar toolbar;
TabLayout tablayout;
ViewPagerAdapter viewPagerAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tab_activity);
    initialize();




}

private void initialize() {
    viewpager = (ViewPager) findViewById(R.id.viewpager);
    toolbar = (Toolbar) findViewById(R.id.toolbar);
    tablayout = (TabLayout) findViewById(R.id.tablayout);
    setSupportActionBar(toolbar);
    viewPagerAdapter=new ViewPagerAdapter(getSupportFragmentManager());
    viewpager.setAdapter(viewPagerAdapter);
    tablayout.setTabsFromPagerAdapter(viewPagerAdapter);
    tablayout.setupWithViewPager(viewpager);

}


}

 class ViewPagerAdapter extends FragmentStatePagerAdapter implements ViewPager.OnPageChangeListener {

public ViewPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    switch (position) {
        case 0:return LocatedEvents.newInstance();

        case 1:return QrCodeScanner.newInstance();
        case 2:return NewsFeed.newInstance();

        case 3:return CreatePoll.newInstance();
        case 4:return MyProfile.newInstance();
    }
    return NewsFeed.newInstance();
}

@Override
public int getCount() {
    return 5;
}
@Override
public CharSequence getPageTitle(int position) {
    return "Tab " + (position + 1);
}

@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override
public void onPageSelected(int position) {

}

@Override
public void onPageScrollStateChanged(int state) {

}
}

新闻提要片段

public class NewsFeed extends Fragment {
@Nullable

public static NewsFeed newInstance() {
    return new NewsFeed();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.newsfeed_fragment, container, false);
    load_data();
    return view;
}
}

共有1个答案

方长卿
2023-03-14

避免每次在

@Override
public Fragment getItem(int position) {
 switch (position) {
  case 0:
   return LocatedEvents.newInstance();

  case 1:
   return QrCodeScanner.newInstance();
  case 2:
   return NewsFeed.newInstance();

  case 3:
   return CreatePoll.newInstance();
  case 4:
   return MyProfile.newInstance();
 }
 return NewsFeed.newInstance();
}

制作一个片段数组并将其传递给适配器。类似于

@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_dashboard);

 initFragments();

}

private void initFragments() {

  ArrayList < Fragment > fragmentArrayList = new ArrayList < > ();

  fragmentArrayList.add(LocatedEvents.newInstance());
  fragmentArrayList.add(QrCodeScanner.newInstance());
  fragmentArrayList.add(NewsFeed.newInstance());
  fragmentArrayList.add(MyProfile.newInstance();

   viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(), fragmentArrayList); viewpager.setAdapter(viewPagerAdapter); tablayout.setTabsFromPagerAdapter(viewPagerAdapter); tablayout.setupWithViewPager(viewpager);
  }

并在适配器中将其更改为

private ArrayList < Fragment > fragments;

  public ViewPagerAdapter(FragmentManager fm, ArrayList < Fragment > fragments) {
   super(fm);
   this.fragments = fragments;
  }

  @Override
  public Fragment getItem(int position) {
   return fragments.get(position);
  }

  @Override
  public int getCount() {
   return fragments.size();
  }
 类似资料:
  • 我使用有5个选项卡的BottomNavigationView。最初,我加载第一个标签一旦应用程序启动。当我单击任何其他选项卡时,就会调用API并加载数据。现在,当我再次单击上一个选项卡(在启动时加载)时,API调用将再次加载相同的数据。

  • 我们使用的是片段,我们不需要在重新创建活动时自动恢复它们。但是,Android每次调用->时,都会恢复片段,即使我们对这些片段使用setRetaInstance(false)。 附言。我们知道,在为配置更改重新创建活动的情况下,可以通过在manifest中添加来完成。但是,在自动清理内存的情况下,如何重新创建活动呢?

  • 问题内容: 我想知道如何防止在数据库表中使用两个相同的标签。有人说我在表中使用两个私钥。但是,W3Schools-网站表示这是不可能的。 问题答案: 我已经更新了NORMA模型,使其与您的图表更加匹配。我可以看到您在哪里犯了一些错误,但是其中一些错误可能是由于我的早期模型造成的。 我已更新此模型以防止重复标签。以前真的没关系。但是,既然您想要它,这里就是(对于Postgres): 请注意,现在有一

  • 这是我的代码: 我想滚动我的卷轴,但不能,因为#refresh重新加载每3000。有人知道如何解决这个问题吗?

  • 我已经创建了一个应用程序的布局有三个标签在Android2.3。每个选项卡都有一个片段,在每个片段中,都有一个列表视图。在列表视图中显示的所有数据都来自互联网,数据总是在变化,所以每次我看那个片段的时候都想重新加载数据。例如,我现在正在观看“tab1”,当我单击“tab2”时,“tab2”中的数据将重新加载,而当我单击返回“tab1”时,“tab1”中的数据也将再次重新加载。我试过了 TabSAd

  • 如何从服务器端获取CQ5中页面每个组件的加载时间。 根据我的实现,我们从请求中加载页面的时间最长。日志文件。但我需要从服务器端获取页面的每个组件加载时间。 我找到了这个链接,但这将从客户端工作:http://www.wemblog.com/2014/05/how-to-find-component-load-time-on-page.html