【问题标题】:Load again data when change bottom bar tab更改底栏选项卡时再次加载数据
【发布时间】:2019-08-12 15:43:14
【问题描述】:

When i change tab of Bottom Bar for example when the home tab is selected and when i change the tab and select category tab in first time load data and it is not problem but when select again home tab again reload fragment and load data再次。 如何解决这个问题并保存状态片段。

我的代码:

bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
  @Override
  public void onTabSelected(int tabId) {
    displayFragment(tabId);
  }
});

private void displayFragment(int id) {
Fragment selectedFragment = null;
switch (id) {
  case R.id.tab_home:
    selectedFragment = HomeFragment.getInstance();
    break;

  case R.id.tab_category:
    selectedFragment = CategoryFragment.getInstace();
    break;
}
if (selectedFragment != null) {
  FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
  transaction.replace(R.id.contentContainer, selectedFragment);
  transaction.commit();
}

}

【问题讨论】:

    标签: android fragment bottomnavigationview


    【解决方案1】:

    在片段数据的整个生命周期中,您可以通过多种方式来保存和更新片段数据。我会研究活动片段的生命周期,以更好地掌握适用于您的上下文的内容。从 30k 英尺开始,在您调用 .replace() 之后,片段的覆盖 onCreateView() 应该会触发,在这里您可以处理您的更新逻辑。

    正如我所提到的,这里的上下文很重要。如果您最终更改了事务逻辑,则可能会影响片段的生命周期。例如,如果您要隐藏/显示片段,则使用覆盖 onHidden() 或 onResume() 可能是更好的解决方案。

    此外,您还应该考虑导航逻辑如何影响活动/片段的后台堆栈并与之交互。在您当前的逻辑中,每次选择选项卡时都会创建片段的新实例。

    【讨论】:

      【解决方案2】:

      这是回答我的问题:

      public class MainActivity extends AppCompatActivity {
      FeedFragment feedFragment;
      PublishFragment publishFragment;
      ServicesFragment servicesFragment;
      SearchFragment searchFragment;
      ProfileFragment profileFragment;
      
      FragmentTransaction ft;
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
      
          BottomBar bottomBar = (BottomBar) findViewById(R.id.bottomBar);
          feedFragment = new FeedFragment();
          publishFragment = new PublishFragment();
          servicesFragment = new ServicesFragment();
          searchFragment = new SearchFragment();
          profileFragment = new ProfileFragment();
      
      
      
          bottomBar.setOnTabSelectListener(new OnTabSelectListener() {
              @Override
              public void onTabSelected(@IdRes int tabId) {
                  if (tabId == R.id.feed_icon) {
                      GeneralUtils.logPrint("feed");
                      ft = getSupportFragmentManager().beginTransaction();
                      if (feedFragment.isAdded()) {
                          ft.show(feedFragment);
                      } else {
                          ft.add(R.id.fragment_container, feedFragment);
                      }
                      hideFragment(ft,publishFragment);
                      hideFragment(ft, servicesFragment);
                      hideFragment(ft,searchFragment);
                      hideFragment(ft,profileFragment);
                      ft.commit();
                  }
                  if (tabId == R.id.publish_icon) {
                      GeneralUtils.logPrint("publish");
                      ft = getSupportFragmentManager().beginTransaction();
                      if (publishFragment.isAdded()) {
                          ft.show(publishFragment);
                      } else {
                          ft.add(R.id.fragment_container, publishFragment);
                      }
                      hideFragment(ft,feedFragment);
                      hideFragment(ft, servicesFragment);
                      hideFragment(ft,searchFragment);
                      hideFragment(ft,profileFragment);
                      ft.commit();
                  }
                  if (tabId == R.id.services_icon) {
                      GeneralUtils.logPrint("services");
                      ft = getSupportFragmentManager().beginTransaction();
                      if (servicesFragment.isAdded()) {
                          ft.show(servicesFragment);
                      } else {
                          ft.add(R.id.fragment_container, servicesFragment);
                      }
                      hideFragment(ft,feedFragment);
                      hideFragment(ft, publishFragment);
                      hideFragment(ft,searchFragment);
                      hideFragment(ft,profileFragment);
                      ft.commit();
      
                  }
                  if (tabId == R.id.search_icon) {
                      GeneralUtils.logPrint("search");
                      ft = getSupportFragmentManager().beginTransaction();
                      if (searchFragment.isAdded()) {
                          ft.show(searchFragment);
                      } else {
                          ft.add(R.id.fragment_container, searchFragment);
                      }
                      hideFragment(ft,feedFragment);
                      hideFragment(ft,publishFragment);
                      hideFragment(ft,servicesFragment);
                      hideFragment(ft,profileFragment);
                      ft.commit();
      
                  }
                  if (tabId == R.id.profile_icon) {
                      GeneralUtils.logPrint("profile");
                      ft = getSupportFragmentManager().beginTransaction();
                      if (profileFragment.isAdded()) {
                          ft.show(profileFragment);
                      } else {
                          ft.add(R.id.fragment_container, profileFragment);
                      }
                      hideFragment(ft,feedFragment);
                      hideFragment(ft, publishFragment);
                      hideFragment(ft,servicesFragment);
                      hideFragment(ft,searchFragment);
                      ft.commit();
      
                  }
              }
          });
      
      
      }
      
      private void hideFragment(FragmentTransaction ft, Fragment f) {
          if (f.isAdded()) {
              ft.hide(f);
          }
      }
      

      }

      【讨论】:

        猜你喜欢
        • 2018-02-27
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多