繁体   English   中英

android 中的应用程序加载时进度条不可见

[英]Progress bar is not visible on App loading in android

这是我的 HomeActivity 课程

 class HomeActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemSelectedListener {
    
        @Inject
        lateinit var homeViewModel: HomeViewModel
    
        var isAppInforeground = true
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            AndroidInjection.inject(this)
            setContentView(R.layout.activity_home)
            navigation.setOnNavigationItemSelectedListener(this)
            loadFragment(HomeFragment())
            if (getGrantStatus()) {
                homeViewModel.apply {
                    saveDailyHourly()
                    observe(stateLiveData, ::onChangeState)
                }
            } else {
                startActivity(Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS))
            }
    
        }
    
        override fun onNavigationItemSelected(item: MenuItem): Boolean {
            var fragment: Fragment? = null
            when (item.itemId) {
                R.id.navigation_home -> fragment = HomeFragment()
                R.id.navigation_monitor -> fragment = MonitorFragment()
                R.id.navigation_profile -> fragment = ProfileFragment()
            }
    
            return loadFragment(fragment)
        }
    
        private fun loadFragment(fragment: Fragment?): Boolean {
            //switching fragment
            if (fragment != null) {
                supportFragmentManager
                    .beginTransaction()
                    .replace(R.id.fragment_container, fragment)
                    .commit()
                return true
            }
            return false
        }
    
       
    
       
    
    
        /**
         * check if PACKAGE_USAGE_STATS permission is aloowed for this application
         *
         * @return true if permission granted
         */
        private fun getGrantStatus(): Boolean {
            val appOps = applicationContext
                .getSystemService(APP_OPS_SERVICE) as AppOpsManager
            val mode = appOps.checkOpNoThrow(
                AppOpsManager.OPSTR_GET_USAGE_STATS,
                Process.myUid(), applicationContext.packageName
            )
            return if (mode == AppOpsManager.MODE_DEFAULT) {
                applicationContext.checkCallingOrSelfPermission(Manifest.permission.PACKAGE_USAGE_STATS) == PackageManager.PERMISSION_GRANTED
            } else {
                mode == AppOpsManager.MODE_ALLOWED
            }
        }
    
        
        private fun onChangeState(state: State) {
            when (state) {
                is Loading -> {
                    // Sho Progress Bar
                    Toast.makeText(this, "Loading ..", Toast.LENGTH_LONG).show()
                }
                is LOADED -> {
                    // Hide Progress Bar
                    Toast.makeText(this, "Loaded", Toast.LENGTH_LONG).show()
                    progressBar1.visibility = View.GONE
                }
                else -> {
    
                }
            }
        }
    }

这是我的 xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   >

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="56dp"
        android:text="@string/title_home"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimary"
        app:itemIconTint="@color/colorNavIcon"
        app:itemTextColor="@color/colorNavText"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/navigation" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="24dp"
        android:paddingLeft="24dp"
        android:paddingRight="24dp"
        android:paddingTop="24dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:context=".MainActivity" >

        <ProgressBar
            android:id="@+id/progressBar1"
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:indeterminate="true" />

    </RelativeLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

I have one view model class where i am calling saveDailyHourly method which take some 1 minute to load data i am trying show loader ie progress bar i have progress bar in xml by default i kept visible and when function loaded i am hiding it but when i启动应用程序进度条未显示我不知道是什么问题请帮助我做错了什么。

在您的代码中,您仅使用将可见性设置为GONE ,从不使用VISIBLE参数显示。 我认为应该放在onChangeState

    private fun onChangeState(state: State) {
        when (state) {
            is Loading -> {
                // Sho Progress Bar
                progressBar1.visibility = View.VISIBLE // ADD THIS
                Toast.makeText(this, "Loading ..", Toast.LENGTH_LONG).show()
            }
            is LOADED -> {
                // Hide Progress Bar
                Toast.makeText(this, "Loaded", Toast.LENGTH_LONG).show()
                progressBar1.visibility = View.GONE
            }
            else -> {

            }
        }
    }

您的progressBar1在XML 设置的开始时可见,但您说它不可见。 只需检查onChangeState调用,放入Log.i("onChangeState", "state:"+state); 在方法中行并检查它得到了什么(看起来它在启动Activity后很快就被加载了LOADED ,所以它隐藏了progressBar1并且不再显示)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM