Last active
March 31, 2024 21:58
-
-
Save keima/1b8cda30aec8cd50fec7743d2ccfa777 to your computer and use it in GitHub Desktop.
Revisions
-
keima revised this gist
Oct 23, 2019 . 4 changed files with 96 additions and 20 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,75 @@ import android.os.Bundle import android.util.Log import android.view.ViewGroup import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import androidx.databinding.DataBindingUtil import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleObserver import androidx.lifecycle.OnLifecycleEvent import app.keima.android.recyclerviewsandbox.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_main) binding.recyclerView.apply { adapter = MyAdapter( arrayOf( "A", "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D", "A", "B", "C", "D" ) ) } } } class MyAdapter(private val dataset: Array<String>) : LifecycleRecyclerAdapter<MyAdapter.MyViewHolder>() { class MyViewHolder(private val textView: TextView) : LifecycleViewHolder(textView) { private val observer = MyObserver() init { lifecycle.addObserver(observer) } fun bindData(data: String) { textView.text = data observer.data = data } } class MyObserver() : LifecycleObserver { var data: String = "?" @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) fun onCreate() { Log.d("MyObserver", "appear: $data") } @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) fun onDestroy() { Log.d("MyObserver", "disappear: $data") } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder { return MyViewHolder(TextView(parent.context).apply { setPadding(8, 40, 8, 40) }) } override fun onBindViewHolder(holder: MyViewHolder, position: Int) { holder.bindData("${dataset[position]} $position") } override fun getItemCount() = dataset.size } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ This gist snippet is [Public Domain](https://wiki.creativecommons.org/wiki/Public_domain). This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,4 @@ import androidx.recyclerview.widget.RecyclerView abstract class LifecycleRecyclerAdapter<T : LifecycleViewHolder> : RecyclerView.Adapter<T>() { This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,28 +1,28 @@ import android.view.View import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.LifecycleRegistry import androidx.recyclerview.widget.RecyclerView abstract class LifecycleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), LifecycleOwner { private val lifecycleRegistry = LifecycleRegistry(this) init { lifecycleRegistry.currentState = Lifecycle.State.INITIALIZED } fun onAppear() { lifecycleRegistry.currentState = Lifecycle.State.CREATED } fun onDisappear() { lifecycleRegistry.currentState = Lifecycle.State.DESTROYED } override fun getLifecycle(): Lifecycle { return lifecycleRegistry } } -
keima created this gist
Apr 10, 2018 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,15 @@ import android.support.v7.widget.RecyclerView abstract class LifecycleRecyclerAdapter<T : LifecycleViewHolder> : RecyclerView.Adapter<T>() { override fun onViewAttachedToWindow(holder: T) { super.onViewAttachedToWindow(holder) holder.onAppear() } override fun onViewDetachedFromWindow(holder: T) { super.onViewDetachedFromWindow(holder) holder.onDisappear() } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,28 @@ import android.arch.lifecycle.Lifecycle import android.arch.lifecycle.LifecycleOwner import android.arch.lifecycle.LifecycleRegistry import android.support.v7.widget.RecyclerView import android.view.View abstract class LifecycleViewHolder(itemView: View) : RecyclerView.ViewHolder( itemView), LifecycleOwner { private val lifecycleRegistry = LifecycleRegistry(this) init { lifecycleRegistry.markState(Lifecycle.State.INITIALIZED) } fun onAppear() { lifecycleRegistry.markState(Lifecycle.State.CREATED) } fun onDisappear() { lifecycleRegistry.markState(Lifecycle.State.DESTROYED) } override fun getLifecycle(): Lifecycle { return lifecycleRegistry } }