簡體   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