Changing fragments via bottom navigation view works well now! Also started work on SettingsFragment.kt

This commit is contained in:
denizk0461
2023-04-13 12:25:43 +02:00
parent 53c2a2a9c4
commit fb50711d36
12 changed files with 338 additions and 11 deletions
@@ -1,6 +1,7 @@
package com.denizk0461.studip.activity
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.WindowCompat
import androidx.navigation.findNavController
@@ -8,15 +9,23 @@ import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.navigateUp
import android.view.Menu
import android.view.MenuItem
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentTransaction
import androidx.lifecycle.Lifecycle
import com.denizk0461.studip.R
import com.denizk0461.studip.data.Dependencies
import com.denizk0461.studip.databinding.ActivityMainBinding
import com.denizk0461.studip.db.EventRepository
import com.denizk0461.studip.fragment.EventFragment
import com.denizk0461.studip.fragment.FoodFragment
import com.denizk0461.studip.fragment.SettingsFragment
class MainActivity : AppCompatActivity() {
private lateinit var appBarConfiguration: AppBarConfiguration
private lateinit var binding: ActivityMainBinding
private var currentFragment = FragmentType.SCHEDULE
private val fragments = listOf(EventFragment(), FoodFragment(), SettingsFragment())
override fun onCreate(savedInstanceState: Bundle?) {
WindowCompat.setDecorFitsSystemWindows(window, false)
@@ -27,6 +36,12 @@ class MainActivity : AppCompatActivity() {
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.contentMain.navView.setOnItemSelectedListener { item ->
loadFragment(bottomIdToType(item.itemId))
}
loadFragment(currentFragment)
// setSupportActionBar(binding.toolbar)
// val navController = findNavController(R.id.nav_host_fragment_content_main)
@@ -41,6 +56,36 @@ class MainActivity : AppCompatActivity() {
// }
}
private fun loadFragment(type: FragmentType): Boolean {
// val fragment = supportFragmentManager.findFragmentByTag(type.type) ?: getFragmentByType(type)
val fragment = getFragment(type)
if (fragment.lifecycle.currentState != Lifecycle.State.INITIALIZED) {
return false
}
// if (supportFragmentManager.fragments.size > 1) {
//
// val currentFragment = supportFragmentManager.findFragmentByTag(currentFragment.type)
// if (currentFragment != null) {
// supportFragmentManager.beginTransaction().remove(currentFragment).commit()
// supportFragmentManager.popBackStack()
// }
// }
// supportFragmentManager.popBackStack()
supportFragmentManager.beginTransaction()
.replace(R.id.nav_host_fragment_content_main, fragment, type.type)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commit()
binding.contentMain.appTitleBar.text = getTitleString(type)
currentFragment = type
return true
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
// Inflate the menu; this adds items to the action bar if it is present.
menuInflater.inflate(R.menu.menu_main, menu)
@@ -62,4 +107,37 @@ class MainActivity : AppCompatActivity() {
return navController.navigateUp(appBarConfiguration)
|| super.onSupportNavigateUp()
}
private fun getFragmentByType(type: FragmentType): Fragment {
// Log.d("AAA!", "help")
return when (type) {
FragmentType.SCHEDULE -> EventFragment()
FragmentType.FOOD -> FoodFragment() // TODO once this fragment has been implemented
FragmentType.SETTINGS -> SettingsFragment()
}
}
private fun bottomIdToType(id: Int): FragmentType = when (id) {
R.id.food -> FragmentType.FOOD
R.id.settings -> FragmentType.SETTINGS
else -> FragmentType.SCHEDULE
}
private fun getFragment(type: FragmentType) = when (type) {
FragmentType.SCHEDULE -> fragments[0]
FragmentType.FOOD -> fragments[1]
FragmentType.SETTINGS -> fragments[2]
}
private fun getTitleString(type: FragmentType) = when (type) {
FragmentType.SCHEDULE -> getString(R.string.title_schedule)
FragmentType.FOOD -> getString(R.string.title_food)
FragmentType.SETTINGS -> getString(R.string.title_settings)
}
enum class FragmentType(val type: String) {
SCHEDULE("schedule"),
FOOD("food"),
SETTINGS("settings"),
}
}
@@ -85,10 +85,10 @@ class EventFragment : Fragment() {
// }
}
// override fun onResume() {
// super.onResume()
// switchToCurrentDayView()
// }
override fun onResume() {
super.onResume()
switchToCurrentDayView()
}
override fun onDestroyView() {
super.onDestroyView()
@@ -96,8 +96,8 @@ class EventFragment : Fragment() {
}
private fun switchToCurrentDayView() {
// binding.viewpager.currentItem = dayOfWeek
binding.dayTabLayout.getTabAt(dayOfWeek)?.select()
binding.viewPager.currentItem = dayOfWeek
// binding.dayTabLayout.getTabAt(dayOfWeek)?.select()
}
private fun launchWebview() {
@@ -0,0 +1,32 @@
package com.denizk0461.studip.fragment
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.denizk0461.studip.databinding.FragmentFoodBinding
class FoodFragment : Fragment() {
private var _binding: FragmentFoodBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentFoodBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
@@ -0,0 +1,68 @@
package com.denizk0461.studip.fragment
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.fragment.app.Fragment
import com.denizk0461.studip.BuildConfig
import com.denizk0461.studip.data.Misc
import com.denizk0461.studip.databinding.FragmentSettingsBinding
class SettingsFragment : Fragment() {
private var _binding: FragmentSettingsBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
private var appVersionClick = 0
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentSettingsBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val toast2 = Toast.makeText(context, "2", Toast.LENGTH_SHORT)
val toast22 = Toast.makeText(context, "22", Toast.LENGTH_SHORT)
val toast222 = Toast.makeText(context, "222", Toast.LENGTH_SHORT)
binding.buttonAppVersion.setOnClickListener {
when (appVersionClick) {
19 -> {
toast2.show()
appVersionClick += 1
}
20 -> {
toast2.cancel()
toast22.show()
appVersionClick += 1
}
21 -> {
toast22.cancel()
toast222.show()
appVersionClick += 1
}
22 -> {
toast222.cancel()
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(Misc.mysteryLink)))
appVersionClick = 0
}
else -> appVersionClick += 1
}
}
binding.appVersionText.text = BuildConfig.VERSION_NAME
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}