[英]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.