Added tabs to indicate which day is selected; not fully implemented. Tabs don't show which day is selected after certain user action

This commit is contained in:
denizk0461
2023-04-11 16:50:45 +02:00
parent 6a5d7448e5
commit 7b33c68db9
9 changed files with 113 additions and 32 deletions
@@ -29,11 +29,11 @@ class MainActivity : AppCompatActivity() {
binding = ActivityMainBinding.inflate(layoutInflater) binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
setSupportActionBar(binding.toolbar) // setSupportActionBar(binding.toolbar)
val navController = findNavController(R.id.nav_host_fragment_content_main) // val navController = findNavController(R.id.nav_host_fragment_content_main)
appBarConfiguration = AppBarConfiguration(navController.graph) // appBarConfiguration = AppBarConfiguration(navController.graph)
setupActionBarWithNavController(navController, appBarConfiguration) // setupActionBarWithNavController(navController, appBarConfiguration)
// binding.fab.setOnClickListener { view -> // binding.fab.setOnClickListener { view ->
// findNavController(R.id.nav_host_fragment_content_main).navigate(R.id.action_FirstFragment_to_SecondFragment) // findNavController(R.id.nav_host_fragment_content_main).navigate(R.id.action_FirstFragment_to_SecondFragment)
@@ -1,6 +1,7 @@
package com.denizk0461.studip.fragment package com.denizk0461.studip.fragment
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
@@ -9,12 +10,16 @@ import androidx.fragment.app.viewModels
import androidx.navigation.fragment.NavHostFragment.Companion.findNavController import androidx.navigation.fragment.NavHostFragment.Companion.findNavController
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.PagerSnapHelper import androidx.recyclerview.widget.PagerSnapHelper
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.OnScrollListener
import com.denizk0461.studip.R import com.denizk0461.studip.R
import com.denizk0461.studip.adapter.StudIPEventPageAdapter import com.denizk0461.studip.adapter.StudIPEventPageAdapter
import com.denizk0461.studip.data.DummyData import com.denizk0461.studip.data.DummyData
import com.denizk0461.studip.data.StudIPParser import com.denizk0461.studip.data.StudIPParser
import com.denizk0461.studip.databinding.FragmentEventBinding import com.denizk0461.studip.databinding.FragmentEventBinding
import com.denizk0461.studip.viewmodel.EventViewModel import com.denizk0461.studip.viewmodel.EventViewModel
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
import java.time.DayOfWeek import java.time.DayOfWeek
import java.time.LocalDate import java.time.LocalDate
import java.time.LocalTime import java.time.LocalTime
@@ -31,8 +36,10 @@ class EventFragment : Fragment() {
// onDestroyView. // onDestroyView.
private val binding get() = _binding!! private val binding get() = _binding!!
private lateinit var recyclerViewAdapter: StudIPEventPageAdapter private lateinit var recyclerViewAdapter: StudIPEventPageAdapter
private lateinit var recyclerViewLayoutManager: LinearLayoutManager private lateinit var layoutManager: LinearLayoutManager
private var dayOfWeek: Int = 0 private var dayOfWeek: Int = 0
private val pagerSnapHelper = PagerSnapHelper()
private var isUserScrolling = false
private val viewModel: EventViewModel by viewModels() private val viewModel: EventViewModel by viewModels()
@@ -55,21 +62,48 @@ class EventFragment : Fragment() {
viewModel.allEvents.observe(viewLifecycleOwner) { events -> viewModel.allEvents.observe(viewLifecycleOwner) { events ->
recyclerViewAdapter = StudIPEventPageAdapter(events)//DummyData.events.toList()) recyclerViewAdapter = StudIPEventPageAdapter(events)//DummyData.events.toList())
binding.recyclerView.adapter = recyclerViewAdapter binding.recyclerView.adapter = recyclerViewAdapter
recyclerViewLayoutManager = layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false) binding.recyclerView.layoutManager = layoutManager
binding.recyclerView.layoutManager = recyclerViewLayoutManager
binding.recyclerView.onFlingListener = null binding.recyclerView.onFlingListener = null
PagerSnapHelper().attachToRecyclerView(binding.recyclerView) pagerSnapHelper.attachToRecyclerView(binding.recyclerView)
// binding.recyclerView.scheduleLayoutAnimation() // binding.recyclerView.scheduleLayoutAnimation()
binding.recyclerView.scrollToPosition(dayOfWeek) binding.recyclerView.scrollToPosition(dayOfWeek)
} }
// viewModel.doAsync { StudIPParser().parse(requireContext()) }
binding.fab.setOnClickListener { view -> binding.fab.setOnClickListener { view ->
launchWebview() launchWebview()
} }
binding.recyclerView.addOnScrollListener(object : OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
isUserScrolling = true
val i = if (dx < 0) {
layoutManager.findFirstVisibleItemPosition()
} else {
layoutManager.findLastVisibleItemPosition()
}
binding.dayTabs.getTabAt(i)?.select()
}
})
binding.dayTabs.addOnTabSelectedListener(object : OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
if (!isUserScrolling) {
binding.recyclerView.smoothScrollToPosition(tab.position)
Log.d("HELLO4", binding.recyclerView.scrollY.toString())
} // TODO where to set isUserScrolling back to true?
}
override fun onTabUnselected(tab: TabLayout.Tab?) {}
override fun onTabReselected(tab: TabLayout.Tab?) {}
})
// binding.daytabmonday.setOnClickListener { binding.recyclerView.scrollToPosition(0) }
// binding.daytabtuesday.setOnClickListener { binding.recyclerView.scrollToPosition(1) }
// binding.daytabwednesday.setOnClickListener { binding.recyclerView.scrollToPosition(2) }
// binding.daytabthursday.setOnClickListener { binding.recyclerView.scrollToPosition(3) }
// binding.daytabfriday.setOnClickListener { binding.recyclerView.scrollToPosition(4) }
// binding.buttonFirst.setOnClickListener { // binding.buttonFirst.setOnClickListener {
// findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment) // findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
// } // }
@@ -10,7 +10,7 @@ import android.webkit.WebViewClient
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import com.denizk0461.studip.data.StudIPParser import com.denizk0461.studip.data.StudIPParser
import com.denizk0461.studip.databinding.FragmentSecondBinding import com.denizk0461.studip.databinding.FragmentParserBinding
import com.denizk0461.studip.viewmodel.ParserViewModel import com.denizk0461.studip.viewmodel.ParserViewModel
import java.net.URLDecoder import java.net.URLDecoder
@@ -19,7 +19,7 @@ import java.net.URLDecoder
*/ */
class ParserFragment : Fragment() { class ParserFragment : Fragment() {
private var _binding: FragmentSecondBinding? = null private var _binding: FragmentParserBinding? = null
private var html = "" // temporary storage for the website HTML private var html = "" // temporary storage for the website HTML
// This property is only valid between onCreateView and // This property is only valid between onCreateView and
@@ -33,7 +33,7 @@ class ParserFragment : Fragment() {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
_binding = FragmentSecondBinding.inflate(inflater, container, false) _binding = FragmentParserBinding.inflate(inflater, container, false)
return binding.root return binding.root
} }
-12
View File
@@ -7,18 +7,6 @@
android:fitsSystemWindows="true" android:fitsSystemWindows="true"
tools:context=".activity.MainActivity"> tools:context=".activity.MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" />
</com.google.android.material.appbar.AppBarLayout>
<include layout="@layout/content_main" /> <include layout="@layout/content_main" />
</androidx.coordinatorlayout.widget.CoordinatorLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
+1
View File
@@ -16,4 +16,5 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/nav_graph" /> app:navGraph="@navigation/nav_graph" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
+57 -5
View File
@@ -1,25 +1,77 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
tools:context=".fragment.EventFragment"> tools:context=".fragment.EventFragment">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<com.google.android.material.appbar.CollapsingToolbarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:title="title"/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/day_tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:tabMode="scrollable">
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/monday"/>
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tuesday"/>
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/wednesday"/>
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/thursday"/>
<com.google.android.material.tabs.TabItem
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/friday"/>
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.CollapsingToolbarLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.recyclerview.widget.RecyclerView <androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_view" android:id="@+id/recycler_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:scrollbars="horizontal"/> android:scrollbars="horizontal"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
<com.google.android.material.floatingactionbutton.FloatingActionButton <com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab" android:id="@+id/fab"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent" android:layout_gravity="bottom|end"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="@dimen/fab_margin" android:layout_marginEnd="@dimen/fab_margin"
android:layout_marginBottom="@dimen/fab_margin" android:layout_marginBottom="@dimen/fab_margin"
app:srcCompat="@android:drawable/ic_dialog_email" /> app:srcCompat="@android:drawable/ic_dialog_email" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout>
+1 -1
View File
@@ -19,7 +19,7 @@
android:id="@+id/SecondFragment" android:id="@+id/SecondFragment"
android:name="com.denizk0461.studip.fragment.ParserFragment" android:name="com.denizk0461.studip.fragment.ParserFragment"
android:label="@string/second_fragment_label" android:label="@string/second_fragment_label"
tools:layout="@layout/fragment_second"> tools:layout="@layout/fragment_parser">
<action <action
android:id="@+id/action_SecondFragment_to_FirstFragment" android:id="@+id/action_SecondFragment_to_FirstFragment"
+6
View File
@@ -7,6 +7,12 @@
<string name="next">Next</string> <string name="next">Next</string>
<string name="previous">Previous</string> <string name="previous">Previous</string>
<string name="monday">MONDAY</string>
<string name="tuesday">TUESDAY</string>
<string name="wednesday">WEDNESDAY</string>
<string name="thursday">THURSDAY</string>
<string name="friday">FRIDAY</string>
<string name="lorem_ipsum"> <string name="lorem_ipsum">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris
volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus volutpat, dolor id interdum ullamcorper, risus dolor egestas lectus, sit amet mattis purus