Add listener for row & improve BottomSheet

dev_raz_wip
Aurelien Hubert 7 years ago
parent 4aacab51ed
commit cf70562735
  1. 35
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/DynamicListAdapter.kt
  2. 10
      app/src/main/java/net/pokeranalytics/android/ui/adapter/components/RowViewType.kt
  3. 19
      app/src/main/java/net/pokeranalytics/android/ui/fragment/NewSessionFragment.kt
  4. 47
      app/src/main/res/layout/activity_home.xml
  5. 14
      app/src/main/res/layout/fragment_bottom_sheet_container.xml

@ -1,6 +1,8 @@
package net.pokeranalytics.android.ui.adapter.components package net.pokeranalytics.android.ui.adapter.components
import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
interface EditableDataDelegate : DynamicRowDelegate { interface EditableDataDelegate : DynamicRowDelegate {
@ -9,26 +11,32 @@ interface EditableDataDelegate : DynamicRowDelegate {
interface DynamicRowDelegate { interface DynamicRowDelegate {
fun adapterRows() : ArrayList<DynamicRowInterface> fun adapterRows() : ArrayList<DynamicRowInterface>
fun boolForRow(row: DynamicRowInterface) : Boolean fun boolForRow(row: DynamicRowInterface) : Boolean
fun stringForRow(row: DynamicRowInterface) : String fun stringForRow(row: DynamicRowInterface) : String
/** /**
* Manages: * Manages:
* - label (string) * - label (string)
* - segmented control (live/online) * - segmented control (live/online)
* - textfield (string) * - textfield (string)
* - switch (bool) * - switch (bool)
* - static content * - static content
* */ * */
} }
interface DynamicRowCallback {
fun onRowSelected(row: DynamicRowInterface)
}
class DynamicListAdapter(delegate: DynamicRowDelegate) : RecyclerView.Adapter<RecyclerView.ViewHolder>() { class DynamicListAdapter(delegate: DynamicRowDelegate) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var rows: ArrayList<DynamicRowInterface> = ArrayList() private var rows: ArrayList<DynamicRowInterface> = ArrayList()
private var delegate: DynamicRowDelegate = delegate private var delegate: DynamicRowDelegate = delegate
var callback: ((row: DynamicRowInterface) -> Unit)? = null
init { init {
this.rows = delegate.adapterRows() this.rows = delegate.adapterRows()
@ -49,7 +57,10 @@ class DynamicListAdapter(delegate: DynamicRowDelegate) : RecyclerView.Adapter<Re
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val dynamicRow = this.rows[position] val dynamicRow = this.rows[position]
(holder as DynamicHolder).bind(dynamicRow, this.delegate) val listener = View.OnClickListener {
callback?.invoke(dynamicRow)
}
(holder as DynamicHolder).bind(dynamicRow, this.delegate, listener)
} }
} }

@ -10,7 +10,7 @@ import net.pokeranalytics.android.R
interface DynamicHolder { interface DynamicHolder {
fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate) fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener)
} }
@ -20,17 +20,15 @@ enum class RowViewType {
TITLE_VALUE; TITLE_VALUE;
inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { inner class FakeViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder {
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate) { override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener) {
} }
} }
inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder { inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), DynamicHolder {
override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate) { override fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener) {
itemView.title.text = row.localizedTitle(itemView.context) itemView.title.text = row.localizedTitle(itemView.context)
itemView.value.text = delegate.stringForRow(row) itemView.value.text = delegate.stringForRow(row)
itemView.container.setOnClickListener { itemView.container.setOnClickListener(listener)
Toast.makeText(itemView.context, "Clicked", Toast.LENGTH_SHORT).show()
}
} }
} }

@ -4,6 +4,8 @@ import android.os.Bundle
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.Toast
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_new_session.* import kotlinx.android.synthetic.main.fragment_new_session.*
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -14,9 +16,11 @@ import net.pokeranalytics.android.R
import net.pokeranalytics.android.model.realm.Session import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.ui.adapter.NewSessionAdapter import net.pokeranalytics.android.ui.adapter.NewSessionAdapter
import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter import net.pokeranalytics.android.ui.adapter.components.DynamicListAdapter
import net.pokeranalytics.android.ui.adapter.components.DynamicRowCallback
import net.pokeranalytics.android.ui.adapter.components.DynamicRowInterface
import net.pokeranalytics.android.util.PokerAnalyticsFragment import net.pokeranalytics.android.util.PokerAnalyticsFragment
class NewSessionFragment: PokerAnalyticsFragment() { class NewSessionFragment : PokerAnalyticsFragment() {
private lateinit var newSession: Session private lateinit var newSession: Session
@ -43,21 +47,16 @@ class NewSessionFragment: PokerAnalyticsFragment() {
val viewManager = LinearLayoutManager(requireContext()) val viewManager = LinearLayoutManager(requireContext())
val newSessionAdapter = DynamicListAdapter(newSession) val newSessionAdapter = DynamicListAdapter(newSession)
newSessionAdapter.callback = {
val bottomSheetFragment = openBottomSheet()
}
recyclerView.apply { recyclerView.apply {
setHasFixedSize(true) setHasFixedSize(true)
layoutManager = viewManager layoutManager = viewManager
adapter = newSessionAdapter adapter = newSessionAdapter
} }
// Bottom sheet example
/*
GlobalScope.launch(Dispatchers.Main) {
delay(2000)
val bottomSheetFragment = openBottomSheet()
delay(2000)
bottomSheetFragment.dismiss()
}
*/
} }
/** /**

@ -1,31 +1,30 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
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=".ui.activity.HomeActivity">
tools:context=".ui.activity.HomeActivity">
<FrameLayout <FrameLayout
android:id="@+id/container" android:id="@+id/container"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="0dp" android:layout_height="0dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintBottom_toTopOf="@+id/navigation"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toTopOf="@+id/navigation" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"/> app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.bottomnavigation.BottomNavigationView <com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/navigation" android:id="@+id/navigation"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="0dp" android:layout_marginStart="0dp"
android:layout_marginStart="0dp" android:layout_marginEnd="0dp"
android:background="?android:attr/windowBackground" android:background="?android:attr/windowBackground"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent" app:layout_constraintRight_toRightOf="parent"
app:menu="@menu/navigation"/> app:menu="@menu/navigation" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

@ -11,8 +11,8 @@
android:background="#222222" android:background="#222222"
android:gravity="center" android:gravity="center"
android:text="Bottom sheet fragment" android:text="Bottom sheet fragment"
android:textSize="18sp"
android:textColor="#FFFFFF" android:textColor="#FFFFFF"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
@ -30,4 +30,16 @@
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@+id/appCompatTextView" /> app:layout_constraintTop_toTopOf="@+id/appCompatTextView" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/editText"
android:layout_width="180dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textColor="@color/white"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save