Skip to content

Library RecyclerView Adapter yang dapat digunakan berulang

License

Notifications You must be signed in to change notification settings

trianapp/singleadapter

Repository files navigation

SingleAdapter

  • Reusable Recyclerview Adapter

install

build.gradle root project

	allprojects {
		repositories {
			...
			maven { url 'https://jitpack.io' }
		}
	}

build.gradle application module

    dependencies {
	    ...
	    implementation 'com.github.trianapp:singleadapter:v1.0.21'
    }

How to use

MainActivity.kt

class MainActivity : AppCompatActivity() {
    
    lateinit var recyclerView:RecyclerView
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        //init recyclerview
        recyclerView = findViewById(R.id.rv)

        //create singleadapter object
       val adapter = SingleAdapter<ItemModel>(R.layout.item_view){
               item,position, args ->
           //on item clicked
           Toast.makeText(this,item.name,LENGTH_LONG).show()
       }

        //set adapter and layout manager
        recyclerView.layoutManager = LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)
        recyclerView.adapter = adapter

        //set data into adapter
        adapter.setData(listOf(
            ItemModel(name = "item 1", code = 1),
            ItemModel(name = "item 2", code = 2),
            ItemModel(name = "item 3", code = 3),
            ItemModel(name = "item 4", code = 4),
            ItemModel(name = "item 5", code = 5),
        ))
        

    }
}

item_view.xml

<?xml version="1.0" encoding="utf-8"?>
<app.trian.application.ItemView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"

    >
   <LinearLayout
       android:id="@+id/ly_parent"
       android:layout_marginTop="16dp"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:orientation="vertical">
       <TextView
           android:id="@+id/tv"
           android:layout_width="match_parent"
           android:text="hai"
           android:layout_height="wrap_content"/>
   </LinearLayout>
</app.trian.application.ItemView>

ItemView.kt

class ItemView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs), SingleAdapterItem<ItemModel>{
    
    private lateinit var text:TextView
    private lateinit var parent:LinearLayout
    
    override fun onFinishInflate() {
        super.onFinishInflate()
        //init view
        text = findViewById(R.id.tv)
        parent = findViewById(R.id.ly_parent)

    }
    override fun bindView(data: ItemModel, position: Int, onClick: (data: ItemModel,position:Int, arg: Any) -> Unit) {
        //set data into view and listen event listener from here
        text.text = data.name
        parent.setOnClickListener {
            onClick(data,position,1)
        }

    }
}

ItemModel.kt

data class ItemModel(
    var name:String,
    var code:Int
)