Add listener for row & improve BottomSheet

dev_raz_wip
Aurelien Hubert 7 years ago
parent 4aacab51ed
commit cf70562735
  1. 13
      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. 11
      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
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
interface EditableDataDelegate : DynamicRowDelegate {
@ -25,10 +27,16 @@ interface DynamicRowDelegate {
}
interface DynamicRowCallback {
fun onRowSelected(row: DynamicRowInterface)
}
class DynamicListAdapter(delegate: DynamicRowDelegate) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private var rows: ArrayList<DynamicRowInterface> = ArrayList()
private var delegate: DynamicRowDelegate = delegate
var callback: ((row: DynamicRowInterface) -> Unit)? = null
init {
this.rows = delegate.adapterRows()
@ -49,7 +57,10 @@ class DynamicListAdapter(delegate: DynamicRowDelegate) : RecyclerView.Adapter<Re
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
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 {
fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate)
fun bind(row: DynamicRowInterface, delegate: DynamicRowDelegate, listener: View.OnClickListener)
}
@ -20,17 +20,15 @@ enum class RowViewType {
TITLE_VALUE;
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 {
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.value.text = delegate.stringForRow(row)
itemView.container.setOnClickListener {
Toast.makeText(itemView.context, "Clicked", Toast.LENGTH_SHORT).show()
}
itemView.container.setOnClickListener(listener)
}
}

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

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

@ -11,8 +11,8 @@
android:background="#222222"
android:gravity="center"
android:text="Bottom sheet fragment"
android:textSize="18sp"
android:textColor="#FFFFFF"
android:textSize="18sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
@ -30,4 +30,16 @@
app:layout_constraintEnd_toEndOf="parent"
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>
Loading…
Cancel
Save