首页 > 解决方案 > 进度条可见性消失在片段中不起作用

问题描述

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;
    }

标签: androidprogress-bar

解决方案


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();
    
        }

推荐阅读