Skip to content

Instantly share code, notes, and snippets.

View DjakaTechnology's full-sized avatar
🏠

Djaka Pradana Jaya Priambudi DjakaTechnology

🏠
View GitHub Profile
object ViewBindingAdapter {
@BindingAdapter("visibilityGone")
@JvmStatic
fun visibilityGone(view: View, isShouldGone: Boolean) {
if (isShouldGone) {
view.visibility = View.GONE
} else {
view.visibility = View.VISIBLE
}
}
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
binding.buttonContinue.setOnClickListener {
binding.name = Random.nextInt(100).toString()
}
@DjakaTechnology
DjakaTechnology / activity_main.xml
Last active June 5, 2020 02:50
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="name"
type="String" />
</data>
<LinearLayout
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
}
}
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
...
class WithoutHolderActivity : AppCompatActivity() {
private val adapter = GenericAdapter(Utils.getFeedItems())
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_without_holder)
initAdapter()
initRV()
}
//If you dont want to use GenericAdapter
class FeedAdapter(var items: List<FeedItem>) : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
private val delegateManager = AdapterDelegateManager<FeedItem>()
init {
delegateManager.run {
addDelegate(FeedPostAdapterDelegate())
addDelegate(FeedStandardAdapterDelegate())
addDelegate(FeedStoryAdapterDelegate())
class FeedStoryAdapterDelegate : AdapterDelegate<FeedItem> {
override fun isForViewType(items: List<FeedItem>, position: Int): Boolean {
return items[position] is FeedStoryItem
}
override fun onCreateViewHolder(parent: ViewGroup): RecyclerView.ViewHolder {
return ItemStoryViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.feed_story_item, parent, false))
}
override fun onBindViewHolder(items: List<FeedItem>, position: Int, holder: RecyclerView.ViewHolder) {
class FeedStandardAdapterDelegate : AdapterDelegate<FeedItem> {
override fun isForViewType(items: List<FeedItem>, position: Int): Boolean {
return items[position] is FeedStandardItem
}
override fun onCreateViewHolder(parent: ViewGroup): RecyclerView.ViewHolder {
return ItemStandardViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.feed_standard_item, parent, false)
)
}
class FeedPostAdapterDelegate : AdapterDelegate<FeedItem> {
override fun isForViewType(items: List<FeedItem>, position: Int): Boolean {
return items[position] is FeedPostItem
}
override fun onCreateViewHolder(parent: ViewGroup): RecyclerView.ViewHolder {
return ItemPostViewHolder(
LayoutInflater.from(parent.context).inflate(R.layout.feed_post_item, parent, false)
)
}