android - 进度条可见性消失在片段中不起作用
问题描述
MainActivity 我有底部导航,如果用户点击底部,它将显示进度条,一旦它从活动移动到片段想要进度条可见性消失
但它不适用于以下代码
主要活动:
progressbar=findViewById(R.id.progressBar);
private void selectFragment(MenuItem item) {
Fragment fragment = null;
Class fragmentClass;
switch (item.getItemId()) {
case R.id.task:
mTitle.setText("TASK LIST");
progressbar.setVisibility(View.VISIBLE);
fragmentClass = TaskFragement.class;
break;
case R.id.account:
mTitle.setText("ACCOUNT LIST");
progressbar.setVisibility(View.VISIBLE);
fragmentClass = AccountFragement.class;
break;
case R.id.contact:
mTitle.setText("CONTACT LIST");
fragmentClass = ContactFragment.class;
break;
case R.id.opportunity:
mTitle.setText("OPPORTUNITY LIST");
fragmentClass = SalesStageFragment.class;
break;
default:
fragmentClass = DashboardFragement.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
}
public ProgressBar setProgressBarVisibility(int gone) {
return null;
}
AccountFragement.java:
public class AccountFragement extends Fragment {
public AccountFragement() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
ProgressBar progressBar=((MainActivity)getActivity()).setProgressBarVisibility(GONE);
if(progressBar!=null){
progressBar.setVisibility(GONE);
}
return rootView;
}
解决方案
FragmentManager 有一个名为 registerFragmentLifecycleCallbacks 的好方法,它可以帮助注册 FragmentManager.FragmentLifecycleCallbacks。这允许我们在片段的生命周期中采取行动。您可以根据需要在 onFragmentCreated() 中执行某些操作。
progressbar=findViewById(R.id.progressBar);
private void selectFragment(MenuItem item) {
Fragment fragment = null;
Class fragmentClass;
switch (item.getItemId()) {
case R.id.task:
mTitle.setText("TASK LIST");
progressbar.setVisibility(View.VISIBLE);
fragmentClass = TaskFragement.class;
break;
case R.id.account:
mTitle.setText("ACCOUNT LIST");
progressbar.setVisibility(View.VISIBLE);
fragmentClass = AccountFragement.class;
break;
case R.id.contact:
mTitle.setText("CONTACT LIST");
fragmentClass = ContactFragment.class;
break;
case R.id.opportunity:
mTitle.setText("OPPORTUNITY LIST");
fragmentClass = SalesStageFragment.class;
break;
default:
fragmentClass = DashboardFragement.class;
}
try {
fragment = (Fragment) fragmentClass.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
FragmentManager fragmentManager = getSupportFragmentManager();
//add this
fragmentManager.registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentCreated(FragmentManager fm, Fragment f, Bundle savedInstanceState) {
super.onFragmentCreated(fm, f, savedInstanceState);
progressBar.setVisibility(GONE);
}
}, true);
fragmentManager.beginTransaction().replace(R.id.frame_container, fragment).commit();
}
推荐阅读
- flutter - Flutter:如何在运行 JavaScript 函数并显示 html 后等待 WebView 完成加载?
- image - 有什么办法可以解决这个警告吗?
- php - 发布大数据时我的 PHP 文件未执行
- laravel - Laravel:无法选择要上传的多个图像
- javascript - Express 服务器不在我的主机上提供静态文件
- apache-kafka - Flink 减少 shuffle 开销和内存消耗
- javascript - 材质表和工具提示上的 ExpressionChangedAfterItHasBeenCheckedError
- javascript - 如何使用 Dragula 限制要放置区域的元素数量?
- vb.net - 你如何用内存地址做指针?
- spring-boot - Spring Boot Open Api 请求 LocalTime