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.appcompat:appcompat:1.6.1'
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'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

@ -11,4 +11,5 @@ class RoadTrip(
fun addPlaceToRoadTripList(place: Place) = places.add(place)
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.view.LayoutInflater
import android.view.ViewGroup
import androidx.navigation.NavController
import androidx.recyclerview.widget.RecyclerView
import uca.baptistearthur.geocaching.R
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 {
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) {
holder.roadTripAccessButton.text = "> " + voyages[position].name
}

@ -3,14 +3,12 @@ package uca.baptistearthur.geocaching.recyclerview
import android.util.Log
import android.view.View
import android.widget.Button
import androidx.navigation.NavController
import androidx.recyclerview.widget.RecyclerView.ViewHolder
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)
@ -18,7 +16,7 @@ class RoadTripViewHolder(val cellule: View): ViewHolder(cellule) {
roadTripAccessButton.setOnClickListener{
val roadTripName = roadTripAccessButton.text.substring(3)
Log.d("RoadTripViewHolder", "RoadTripViewHolder clicked: ${roadTripName}")
navController.navigate(R.id.action_roadTripFragment_to_roadtripDetail)
// val roadTrip: RoadTrip = Find roadtrip by name here
// 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.os.Bundle
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 uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.services.FragmentService
import uca.baptistearthur.geocaching.ui.fragment.Map
import uca.baptistearthur.geocaching.ui.fragment.RoadTripFragment
class MainWindow: AppCompatActivity() {
@SuppressLint("MissingInflatedId")
@ -19,25 +21,20 @@ class MainWindow: AppCompatActivity() {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_window)
val fragmentService = FragmentService()
// Bottom menu
fragmentService.loadFragment(Map(), supportFragmentManager)
val navigation = findViewById<BottomNavigationView>(R.id.bottom_navigation)
navigation.selectedItemId= R.id.map
navigation.setOnItemSelectedListener {
when (it.itemId) {
R.id.map -> {
fragmentService.loadFragment(map, supportFragmentManager)
true
}
R.id.roadTrip -> {
fragmentService.loadFragment(RoadTripFragment(), supportFragmentManager)
true
}
else -> false
}
val bottomNavigation = findViewById<BottomNavigationView>(R.id.bottom_navigation)
val navController = findNavController(R.id.fragment_container)
bottomNavigation.setupWithNavController(navController)
bottomNavigation.setOnItemReselectedListener { item ->
val reselectedDestinationId = item.itemId
navController.popBackStack(reselectedDestinationId, inclusive = false)
}
bottomNavigation.setOnItemSelectedListener { item ->
NavigationUI.onNavDestinationSelected(item, navController)
true
}
}
}

@ -2,21 +2,19 @@ package uca.baptistearthur.geocaching.ui.fragment
import android.annotation.SuppressLint
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.EditText
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import uca.baptistearthur.geocaching.R
import uca.baptistearthur.geocaching.data.Stub
import uca.baptistearthur.geocaching.model.RoadTrip
import uca.baptistearthur.geocaching.recyclerview.RoadTripAdapter
import uca.baptistearthur.geocaching.services.FragmentService
import uca.baptistearthur.geocaching.ui.activity.MainWindow
import java.util.*
// 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? {
val view = inflater.inflate(R.layout.fragment_roadtrip, container, false)
roadTripRecyclerView = view?.findViewById(R.id.recyclerViewRoadTripList)
roadTripRecyclerView?.adapter = RoadTripAdapter(model)
roadTripRecyclerView?.adapter = RoadTripAdapter(model, findNavController())
roadTripRecyclerView?.layoutManager = LinearLayoutManager(context)
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:orientation="vertical">
<TextView
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
<fragment
android:id="@+id/fragment_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
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
android:id="@+id/bottom_navigation"

@ -6,23 +6,14 @@
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
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
<fragment
android:id="@+id/fragment_container"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
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
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