Navigation with NavGraph

pull/7/head
Arthur VALIN 2 years ago
parent fd33b41dd2
commit d97ad3724c

@ -38,6 +38,9 @@ dependencies {
implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0' implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
testImplementation 'junit:junit:4.13.2' testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

@ -11,4 +11,5 @@ class RoadTrip(
fun addPlaceToRoadTripList(place: Place) = places.add(place) fun addPlaceToRoadTripList(place: Place) = places.add(place)
fun addPlaceToRoadTripList(latitude: Double, longitude: Double) = places.add(Place(latitude, longitude)) fun addPlaceToRoadTripList(latitude: Double, longitude: Double) = places.add(Place(latitude, longitude))
} }

@ -3,18 +3,19 @@ package uca.baptistearthur.geocaching.recyclerview
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.ViewGroup import android.view.ViewGroup
import androidx.navigation.NavController
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import uca.baptistearthur.geocaching.R import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.model.RoadTrip import uca.baptistearthur.geocaching.model.RoadTrip
class RoadTripAdapter (val voyages: List<RoadTrip>) : RecyclerView.Adapter<RoadTripViewHolder>(){ class RoadTripAdapter(val voyages: List<RoadTrip>, val navController: NavController) : RecyclerView.Adapter<RoadTripViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RoadTripViewHolder { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RoadTripViewHolder {
return RoadTripViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.cell_one_roadtrip, parent, false)) return RoadTripViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.cell_one_roadtrip, parent, false), navController)
} }
@SuppressLint("SetTextI18n") @SuppressLint("SetTextI18n", "ClickableViewAccessibility")
override fun onBindViewHolder(holder: RoadTripViewHolder, position: Int) { override fun onBindViewHolder(holder: RoadTripViewHolder, position: Int) {
holder.roadTripAccessButton.text = "> " + voyages[position].name holder.roadTripAccessButton.text = "> " + voyages[position].name
} }

@ -3,14 +3,12 @@ package uca.baptistearthur.geocaching.recyclerview
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.widget.Button import android.widget.Button
import androidx.navigation.NavController
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import uca.baptistearthur.geocaching.R import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.model.RoadTrip
import uca.baptistearthur.geocaching.services.FragmentService
import uca.baptistearthur.geocaching.ui.activity.MainWindow
import uca.baptistearthur.geocaching.ui.fragment.DetailledRoadTripFragment
class RoadTripViewHolder(val cellule: View): ViewHolder(cellule) {
class RoadTripViewHolder(val cellule: View, val navController: NavController): ViewHolder(cellule) {
var roadTripAccessButton: Button = cellule.findViewById(R.id.btnGetRoadTripsInfo) var roadTripAccessButton: Button = cellule.findViewById(R.id.btnGetRoadTripsInfo)
@ -18,7 +16,7 @@ class RoadTripViewHolder(val cellule: View): ViewHolder(cellule) {
roadTripAccessButton.setOnClickListener{ roadTripAccessButton.setOnClickListener{
val roadTripName = roadTripAccessButton.text.substring(3) val roadTripName = roadTripAccessButton.text.substring(3)
Log.d("RoadTripViewHolder", "RoadTripViewHolder clicked: ${roadTripName}") Log.d("RoadTripViewHolder", "RoadTripViewHolder clicked: ${roadTripName}")
navController.navigate(R.id.action_roadTripFragment_to_roadtripDetail)
// val roadTrip: RoadTrip = Find roadtrip by name here // val roadTrip: RoadTrip = Find roadtrip by name here
// FragmentService().loadFragment(DetailledRoadTripFragment(roadTrip), (cellule.context as MainWindow).supportFragmentManager) // FragmentService().loadFragment(DetailledRoadTripFragment(roadTrip), (cellule.context as MainWindow).supportFragmentManager)
} }

@ -3,12 +3,14 @@ package uca.baptistearthur.geocaching.ui.activity
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.NavigationUI
import androidx.navigation.ui.setupWithNavController
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import uca.baptistearthur.geocaching.R import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.services.FragmentService import uca.baptistearthur.geocaching.services.FragmentService
import uca.baptistearthur.geocaching.ui.fragment.Map import uca.baptistearthur.geocaching.ui.fragment.Map
import uca.baptistearthur.geocaching.ui.fragment.RoadTripFragment
class MainWindow: AppCompatActivity() { class MainWindow: AppCompatActivity() {
@SuppressLint("MissingInflatedId") @SuppressLint("MissingInflatedId")
@ -19,25 +21,20 @@ class MainWindow: AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.main_window) setContentView(R.layout.main_window)
val fragmentService = FragmentService() val bottomNavigation = findViewById<BottomNavigationView>(R.id.bottom_navigation)
val navController = findNavController(R.id.fragment_container)
// Bottom menu bottomNavigation.setupWithNavController(navController)
fragmentService.loadFragment(Map(), supportFragmentManager) bottomNavigation.setOnItemReselectedListener { item ->
val navigation = findViewById<BottomNavigationView>(R.id.bottom_navigation) val reselectedDestinationId = item.itemId
navigation.selectedItemId= R.id.map navController.popBackStack(reselectedDestinationId, inclusive = false)
navigation.setOnItemSelectedListener {
when (it.itemId) {
R.id.map -> {
fragmentService.loadFragment(map, supportFragmentManager)
true
} }
R.id.roadTrip -> {
fragmentService.loadFragment(RoadTripFragment(), supportFragmentManager) bottomNavigation.setOnItemSelectedListener { item ->
NavigationUI.onNavDestinationSelected(item, navController)
true true
} }
else -> false
}
}
} }
} }

@ -2,21 +2,19 @@ package uca.baptistearthur.geocaching.ui.fragment
import android.annotation.SuppressLint import android.annotation.SuppressLint
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
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button import android.widget.Button
import android.widget.EditText import android.widget.EditText
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import uca.baptistearthur.geocaching.R import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.data.Stub import uca.baptistearthur.geocaching.data.Stub
import uca.baptistearthur.geocaching.model.RoadTrip import uca.baptistearthur.geocaching.model.RoadTrip
import uca.baptistearthur.geocaching.recyclerview.RoadTripAdapter import uca.baptistearthur.geocaching.recyclerview.RoadTripAdapter
import uca.baptistearthur.geocaching.services.FragmentService
import uca.baptistearthur.geocaching.ui.activity.MainWindow
import java.util.* import java.util.*
// TODO: Rename parameter arguments, choose names that match // TODO: Rename parameter arguments, choose names that match
@ -51,8 +49,10 @@ class RoadTripFragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_roadtrip, container, false) val view = inflater.inflate(R.layout.fragment_roadtrip, container, false)
roadTripRecyclerView = view?.findViewById(R.id.recyclerViewRoadTripList) roadTripRecyclerView = view?.findViewById(R.id.recyclerViewRoadTripList)
roadTripRecyclerView?.adapter = RoadTripAdapter(model) roadTripRecyclerView?.adapter = RoadTripAdapter(model, findNavController())
roadTripRecyclerView?.layoutManager = LinearLayoutManager(context) roadTripRecyclerView?.layoutManager = LinearLayoutManager(context)
editTextRoadTripName = view?.findViewById(R.id.editTextRoadTripName) editTextRoadTripName = view?.findViewById(R.id.editTextRoadTripName)

@ -0,0 +1,48 @@
package uca.baptistearthur.geocaching.ui.fragment
import android.content.Context
import android.content.pm.PackageManager
import android.location.LocationManager
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import org.osmdroid.config.Configuration
import org.osmdroid.util.GeoPoint
import org.osmdroid.views.MapView
import org.osmdroid.views.overlay.ScaleBarOverlay
import android.Manifest.permission.ACCESS_FINE_LOCATION
import android.location.Location
import android.location.LocationListener
import android.util.Log
import android.widget.ProgressBar
import androidx.activity.result.contract.ActivityResultContracts
import org.osmdroid.bonuspack.routing.OSRMRoadManager
import org.osmdroid.bonuspack.routing.RoadManager
import org.osmdroid.config.IConfigurationProvider
import org.osmdroid.library.BuildConfig
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
import org.osmdroid.tileprovider.util.StorageUtils.getStorage
import org.osmdroid.views.overlay.compass.CompassOverlay
import org.osmdroid.views.overlay.compass.InternalCompassOrientationProvider
import org.osmdroid.views.overlay.mylocation.GpsMyLocationProvider
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay
import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.ui.overlay.AddMarkerOverlay
import uca.baptistearthur.geocaching.ui.overlay.RecenterOverlay
class RoadtripDetail : Fragment() {
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
Log.d("GeoMap", "MAP ON CREATE VIEW")
// Inflate the layout for this fragment
val view = inflater.inflate(R.layout.roadtrip_detail, container, false)
return view
}
}

@ -6,23 +6,14 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<TextView <fragment
android:layout_width="match_parent"
android:layout_height="10dp"
android:layout_weight="1"
android:background="@color/main_turquoise_700"
android:paddingLeft="20dp"
android:gravity="center_vertical"
android:text="@string/app_name"
android:textColor="@color/main_turquoise_50"
android:textSize="20sp"
android:textStyle="bold" />
<FrameLayout
android:id="@+id/fragment_container" android:id="@+id/fragment_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="8"/> android:layout_weight="8"
app:defaultNavHost="true"
app:navGraph="@navigation/navgraph" />
<com.google.android.material.bottomnavigation.BottomNavigationView <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation" android:id="@+id/bottom_navigation"

@ -6,23 +6,14 @@
android:layout_height="match_parent" android:layout_height="match_parent"
android:orientation="vertical"> android:orientation="vertical">
<TextView <fragment
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/main_turquoise_700"
android:gravity="center_vertical"
android:padding="20dp"
android:text="@string/app_name"
android:textColor="@color/main_turquoise_50"
android:textSize="20sp"
android:textStyle="bold" />
<FrameLayout
android:id="@+id/fragment_container" android:id="@+id/fragment_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="8"/> android:layout_weight="8"
app:defaultNavHost="true"
app:navGraph="@navigation/navgraph" />
<com.google.android.material.bottomnavigation.BottomNavigationView <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation" android:id="@+id/bottom_navigation"

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.fragment.RoadtripDetail">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="DETAIL"/>
</FrameLayout>

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<navigation 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/navgraph"
app:startDestination="@id/map">
<fragment
android:id="@+id/roadTrip"
android:name="uca.baptistearthur.geocaching.ui.fragment.RoadTripFragment"
android:label="fragment_roadtrip"
tools:layout="@layout/fragment_roadtrip" >
<action
android:id="@+id/action_roadTripFragment_to_roadtripDetail"
app:destination="@id/roadtripDetail" />
</fragment>
<fragment
android:id="@+id/roadtripDetail"
android:name="uca.baptistearthur.geocaching.ui.fragment.RoadtripDetail"
android:label="roadtrip_detail"
tools:layout="@layout/roadtrip_detail" />
<fragment
android:id="@+id/map"
android:name="uca.baptistearthur.geocaching.ui.fragment.Map"
android:label="fragment_map"
tools:layout="@layout/fragment_map" />
</navigation>
Loading…
Cancel
Save