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