java - 停止从 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();
}
}
如何停止刷新?
解决方案
每次选择导航项时,您都会创建一个新片段。
尝试将片段作为在 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,这不会导致性能问题。有关更多详细信息,您可以在此处阅读片段的生命周期。
推荐阅读
- android - Android动态主题
- airflow - 如何毫不拖延地安排执行?
- c - 如何将这些函数放在 Headers (C) 中
- python - django.db.utils.OperationalError: no such table: MainApp_user 当我尝试创建超级用户时
- csv - 如何从谷歌云平台下载表格
- go - 打破悬挂式扫描仪的正确方法是什么?
- c++-actor-framework - 在 Visual Studio 中使用 Actor 框架
- javascript - 查找数组中每个数字的频率
- ios - UIKit:如何使用以编程方式创建的约束为约束更改设置动画?
- python - 如何在 knn 算法中使用加权标签?