0

在我StartActivity的BottomNavigationBar監聽器具有以下設置:的Android - 瀏覽量在新BottomNavigationBar - 防止重載片段

private GuideFragment guideFragment = new GuideFragment(); 
private MapFragment mapFragment = new MapFragment(); 
private MoreFragment moreFragment = new MoreFragment(); 

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() { 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     Fragment selectedFragment = null; 
     switch (item.getItemId()) { 
      case R.id.navigation_guide: 
       selectedFragment = guideFragment; 
       break; 
      case R.id.navigation_map: 
       selectedFragment = mapFragment; 
       break; 
      case R.id.navigation_more: 
       selectedFragment = moreFragment; 
       break; 
     } 
     FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
     transaction.replace(R.id.content, selectedFragment); 
     transaction.commit(); 
     return true; 
    } 

}; 

正如我上面提到我想阻止所選片段總是重新加載源/視圖。 我嘗試了一些東西,如 - 在片段:

if (rootView == null) 
    inflater.inflate... 

但仍然片段重新創建視圖和負載(對我來說)webresources新。

我讀一些網頁瀏覽量可以幫助,尤其是

offScreenPageLimit 

應該做的魔力。

我的主要問題是我應該在哪裏實施PageViewer - 是否有可能在我的StartActivity? 或者我可以用其他方式解決問題嗎?

+0

你的片段直接或切線相關?也就是說,每個片段的內容是否存在並且沒有其他的意義是有意義的?如果沒有,那麼也許用一個'ViewPager'切換一個標籤導航會更好地滿足你的要求。 – CzarMatt

+0

所有三個片段都在不同的視圖/選項卡中。 View Pager然後是自己的類還是可以將它添加到我的活動中? –

+0

或者我理解正確 - 我是否必須刪除BottomNavigation並將其替換爲ViewPager? –

回答

0

我做到了男孩! 沒有必要的PageViewer。

這裏是我的解決方案(所有StartActivity編碼不是碎片):

private final GuideFragment guideFragment = new GuideFragment(); 
private final MapFragment mapFragment = new MapFragment(); 
private final MoreFragment moreFragment = new MoreFragment(); 
private final android.app.FragmentManager fm = getFragmentManager(); 
Fragment active = guideFragment; 

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener 
     = new BottomNavigationView.OnNavigationItemSelectedListener() { 

    @Override 
    public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.navigation_guide: 
       if(active != guideFragment) { 
        fm.beginTransaction().show(guideFragment).commit(); 
       } 
       else { 
        fm.beginTransaction().hide(active).show(guideFragment).commit(); 
       } 
       active = guideFragment; 
       break; 
      case R.id.navigation_map: 
       fm.beginTransaction().hide(active).show(mapFragment).commit(); 
       active = mapFragment; 
       break; 
      case R.id.navigation_more: 
       fm.beginTransaction().hide(active).show(moreFragment).commit(); 
       active = moreFragment; 
       break; 
     } 

     return true; 
    } 

}; 

和的onCreate列出的事務提交。 fm.beginTransaction().add(R.id.content,moreFragment).commit(); fm.beginTransaction().add(R.id.content, mapFragment).commit(); fm.beginTransaction().add(R.id.content, guideFragment).commit();

如果您有3個選項卡,則提交第一個選項卡片段最後(fragm3,fragm2,fragm1)非常重要。

智能手機上的高速性能現在通過不加載每個片段的新/刷新。