terus yang penting jangan lupa tambahkan di app/build.gradle apply plugin: 'kotlin-kapt' yang nantinya digunakan untuk kotlin compiler.
lanjut ke pembuatan class converter yang akan digunakan untuk menampilkan gambar secara data binding. class nya seperti berikut ini.
persiapan selesai, langkah pertama merubah ItemPlaceViewModel. tambahkan model dari Place dan variable.
setelah item view model dirubah, lanjut ke layout xml dari item view model tersebut. tampilkan datanya. berikut adalah layout item_place.xml yang sudah dirubah.
This file contains 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 characters
<?xml version="1.0" encoding="utf-8"?> | |
<layout xmlns:android="http://schemas.android.com/apk/res/android" | |
xmlns:tools="http://schemas.android.com/tools" | |
xmlns:app="http://schemas.android.com/apk/res-auto"> | |
<data> | |
<variable | |
name="itemPlace" | |
type="com.yoesuv.mvvmnetworking.menu.viewmodels.ItemPlaceViewModel"/> | |
</data> | |
<RelativeLayout | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content"> | |
<!-- imageView item place --> | |
<android.support.v7.widget.AppCompatImageView | |
android:id="@+id/imageViewItemPlace" | |
android:layout_width="70dp" | |
android:layout_height="70dp" | |
android:scaleType="centerCrop" | |
app:srcCompat="@drawable/sample_image" | |
app:loadImage="@{itemPlace.image}"/> | |
<LinearLayout | |
android:id="@+id/layoutText" | |
android:layout_width="match_parent" | |
android:layout_height="wrap_content" | |
android:orientation="vertical" | |
android:layout_toRightOf="@id/imageViewItemPlace" | |
android:layout_toEndOf="@id/imageViewItemPlace" | |
android:layout_centerVertical="true" | |
android:layout_marginLeft="8dp" | |
android:layout_marginStart="8dp"> | |
<!-- textView title item place --> | |
<android.support.v7.widget.AppCompatTextView | |
android:id="@+id/textTitle" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="@{itemPlace.title}" | |
android:textSize="18sp" | |
android:textStyle="bold" | |
tools:text="Place Name"/> | |
<!-- textView location item place --> | |
<android.support.v7.widget.AppCompatTextView | |
android:id="@+id/textLocation" | |
android:layout_width="wrap_content" | |
android:layout_height="wrap_content" | |
android:text="@{itemPlace.location}" | |
tools:text="Place Location"/> | |
</LinearLayout> | |
</RelativeLayout> | |
</layout> |
This file contains 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 characters
package com.yoesuv.mvvmnetworking.menu.adapters | |
import android.content.Context | |
import android.databinding.DataBindingUtil | |
import android.support.v7.widget.RecyclerView | |
import android.view.LayoutInflater | |
import android.view.ViewGroup | |
import com.yoesuv.mvvmnetworking.R | |
import com.yoesuv.mvvmnetworking.databinding.ItemPlaceBinding | |
import com.yoesuv.mvvmnetworking.menu.models.ListPlaceResponseModel | |
import com.yoesuv.mvvmnetworking.menu.viewmodels.ItemPlaceViewModel | |
class ListPlaceAdapter(val context: Context): RecyclerView.Adapter<ListPlaceAdapter.ItemPlaceViewHolder>() { | |
private var listPlace: MutableList<ListPlaceResponseModel.PlaceModel> = mutableListOf() | |
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ItemPlaceViewHolder { | |
val binding: ItemPlaceBinding = DataBindingUtil.inflate(LayoutInflater.from(context), R.layout.item_place, parent, false) | |
return ItemPlaceViewHolder(binding) | |
} | |
override fun getItemCount(): Int { | |
return listPlace.size | |
} | |
override fun onBindViewHolder(holder: ItemPlaceViewHolder, position: Int) { | |
holder.bindData(listPlace[holder.adapterPosition]) | |
} | |
fun setData(list: MutableList<ListPlaceResponseModel.PlaceModel>){ | |
this.listPlace = list | |
} | |
class ItemPlaceViewHolder(private val binding: ItemPlaceBinding) : RecyclerView.ViewHolder(binding.root) { | |
fun bindData(model: ListPlaceResponseModel.PlaceModel){ | |
val viewModel = ItemPlaceViewModel(model) | |
binding.itemPlace = viewModel | |
} | |
} | |
} |
This file contains 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 characters
package com.yoesuv.mvvmnetworking.menu.views | |
import android.arch.lifecycle.Observer | |
import android.arch.lifecycle.ViewModelProviders | |
import android.databinding.DataBindingUtil | |
import android.support.v7.app.AppCompatActivity | |
import android.os.Bundle | |
import android.support.v7.widget.LinearLayoutManager | |
import com.yoesuv.mvvmnetworking.R | |
import com.yoesuv.mvvmnetworking.databinding.ActivityMainBinding | |
import com.yoesuv.mvvmnetworking.menu.adapters.ListPlaceAdapter | |
import com.yoesuv.mvvmnetworking.menu.viewmodels.MainViewModel | |
class MainActivity : AppCompatActivity() { | |
private lateinit var binding: ActivityMainBinding | |
private lateinit var viewModel: MainViewModel | |
private lateinit var adapter: ListPlaceAdapter | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
binding = DataBindingUtil.setContentView(this, R.layout.activity_main) | |
viewModel = ViewModelProviders.of(this).get(MainViewModel::class.java) | |
binding.main = viewModel | |
setupRecyclerView() | |
observeLiveData() | |
viewModel.getListPlace() | |
} | |
private fun setupRecyclerView(){ | |
val layoutManager = LinearLayoutManager(this) | |
binding.recyclerViewPlace.layoutManager = layoutManager | |
adapter = ListPlaceAdapter(this) | |
binding.recyclerViewPlace.adapter = adapter | |
} | |
private fun observeLiveData(){ | |
viewModel.listPlace.observe(this, Observer { | |
adapter.setData(it?.data!!) | |
adapter.notifyDataSetChanged() | |
}) | |
viewModel.error.observe(this, Observer { | |
//handle error atau tampilkan pesan errror | |
}) | |
} | |
} |
selamat mencoba.
0 Komentar