首页 > 解决方案 > 停止从 Firebase 数据库刷新

问题描述

我有一个名为的片段HomeFragment.java,其中有另一个片段,其中包含您在 gif 中看到的卡片。问题是,每当我去另一个片段时,当我回到我的HomeFragment.java所有卡片刷新并获得新的......我怎么能停止刷新?

在此处输入图像描述

这是我的HomeFragment.java

public class HomeFragment extends Fragment {

    private ViewPager mPager;
    private CardStackAdapter mAdapter;

    @Nullable
    @Override

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

    View viewHome = inflater.inflate(R.layout.fragment_home, container, false);

    mPager = (ViewPager) viewHome.findViewById(R.id.viewPagerHome);
    mAdapter = new CardStackAdapter(getActivity().getSupportFragmentManager());

    mPager.setPageTransformer(true, new CardStackTransformer());
    mPager.setOffscreenPageLimit(5);

    mPager.setAdapter(mAdapter);


    final TextView txtHomeTitulo = viewHome.findViewById(R.id.txtHomeTitulo);
    final TextView txtHomeDesc = viewHome.findViewById(R.id.txtHomeDesc);


    final ImageView imgCard1 = viewHome.findViewById(R.id.imgFotoPais);


    Typeface tpTitulos = Typeface.createFromAsset(getContext().getAssets(),"fonts/RobotoSlab-Bold.ttf");
    Typeface tpDesc = Typeface.createFromAsset(getContext().getAssets(),"fonts/RobotoSlab-Light.ttf");


    txtHomeTitulo.setTypeface(tpTitulos);
    txtHomeDesc.setTypeface(tpDesc);

    return viewHome;

}

private class CardStackTransformer implements ViewPager.PageTransformer {

    @Override
    public void transformPage(View page, float position) {
        if (position >= 0)
        {
            page.setScaleX(0.8f - 0.2f * position);
            page.setScaleY(0.8f);

            page.setTranslationX(- page.getWidth()*position);
            page.setTranslationY(30 * position);
           }
       }
   }
}

这是我MainActivityjava拥有所有导航工具栏片段的地方:

public class MainActivity extends AppCompatActivity {
    BottomNavigationView bottomNav;
    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // MODO IMERSIVO //
    immersiveMode(); // Método para colocar em modo imersivo

    getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, new HomeFragment()).commit();
    bottomNav = findViewById(R.id.bottomNavigationView);
   bottomNav.setOnNavigationItemSelectedListener(navListener);

}
private BottomNavigationView.OnNavigationItemSelectedListener navListener =
    new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            Fragment selectedFragment = null;

            switch (item.getItemId()) {
                case R.id.itemHome:
                    selectedFragment = new HomeFragment();
                    break;
                case R.id.itemExplore:
                    selectedFragment = new ExploreFragment();
                    break;
                case R.id.itemCamera:
                    bottomNav.setVisibility(View.GONE);
                    selectedFragment = new CameraFragment();
                    break;
                case R.id.itemProfile:
                    selectedFragment = new ProfileFragment();
                    break;
            }
            getSupportFragmentManager().beginTransaction().replace(R.id.fragmentContainer, selectedFragment).commit();
            return true;
        }
    };


private void immersiveMode(){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        int UI_OPTIONS = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
        getWindow().getDecorView().setSystemUiVisibility(UI_OPTIONS);
    }

}


@Override
protected void onResume() {
    super.onResume();

    immersiveMode();

    }
}

如何停止刷新?

标签: javaandroidandroid-fragments

解决方案


每次选择导航项时,您都会创建一个新片段。

尝试将片段作为在 MainActivity 的 onCreate() 中初始化的类变量。然后使用这些初始化的片段设置 selectedFragment,而不是创建新片段。

编辑 示例更改:

public class MainActivity extends AppCompatActivity {
    BottomNavigationView bottomNav;

    HomeFragment mHomeFragment;
    ExploreFragment mExploreFragment;
    CameraFragment mCameraFragment;
    ProfileFragment mProfileFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // MODO IMERSIVO //
        immersiveMode(); // Método para colocar em modo imersivo

        mHomeFragment = new HomeFragment();
        mExploreFragment = new ExploreFragment();
        mCameraFragment = new CameraFragment();
        mProfileFragment = new ProfileFragment();

        getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.fragmentContainer, selectedFragment)
            .commit();
        bottomNav = findViewById(R.id.bottomNavigationView);
        bottomNav.setOnNavigationItemSelectedListener(navListener);
    }

    private BottomNavigationView.OnNavigationItemSelectedListener 
navListener =
        new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                Fragment selectedFragment = null;

                switch (item.getItemId()) {
                    case R.id.itemHome:
                        selectedFragment = mHomeFragment;
                        break;
                    case R.id.itemExplore:
                        selectedFragment = mExploreFragment;
                        break;
                    case R.id.itemCamera:
                        bottomNav.setVisibility(View.GONE);
                        selectedFragment = mCameraFragment;
                        break;
                    case R.id.itemProfile:
                        selectedFragment = mProfileFragment;
                        break;
                }

                getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.fragmentContainer,selectedFragment)
                    .commit();
                return true;
            }
    };


    private void immersiveMode(){
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            int UI_OPTIONS = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | 
                        View.SYSTEM_UI_FLAG_FULLSCREEN | 
                        View.SYSTEM_UI_FLAG_LAYOUT_STABLE | 
                        View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | 
                        View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
         getWindow().getDecorView()
             .setSystemUiVisibility(UI_OPTIONS);
    }
}

AFAIK,这不会导致性能问题。有关更多详细信息,您可以在此处阅读片段的生命周期。


推荐阅读