/easyadapter

An adapter to reduce time for writing boilerplate code and speed up build time for RecyclerView.

Primary LanguageKotlinMIT LicenseMIT

EasyAdapter

An adapter to reduce time for writing boilerplate code and speed up build time for RecyclerView.

Demo

Installation (with Gradle)

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

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

Step 2. Add the dependency

dependencies {
		implementation 'com.github.islamdidarmd:easyadapter:0.1.2'
	}

How to use

For general RecyclerView:

Java

 recyclerView.setAdapter(new EasyAdapter.Builder<Integer>()
                .setLayout(R.layout.row_list)
                .setData(Arrays.asList(1, 2, 3, 4))
                .setCallback(new Callback<Integer>() {
                    @Override
                    public void onBindViewHolder(@NonNull EasyAdapter.Companion.ViewHolder viewHolder, @NonNull View itemView, int position, Integer item) {
                        TextView tv = viewHolder.itemView.findViewById(R.id.textView);
                        tv.setText(item.toString());
                    }
                })
                .build());

Kotlin

recyclerView.adapter = EasyAdapter.Builder<Int>()
                .setLayout(R.layout.row_list)
                .setData(list)
                .setCallback(object : Callback<Int> {
                    override fun onBindViewHolder(viewHolder: EasyAdapter.Companion.ViewHolder, itemView: View, position: Int, item: Int) {
                        val tv: TextView = viewHolder.itemView.textView
                        tv.text = item.toString()
                    }
                })
                .build()

For RecyclerView with multiple section:

Java

recyclerView.setAdapter(new EasySectionedAdapter.Builder<Integer>()
                .setHeaderLayout(R.layout.row_header)
                .setChildLayout(R.layout.row_list)
                .setDataSet(Arrays.asList(Arrays.asList(1, 2, 3, 4), Arrays.asList(1, 2), Arrays.asList(1, 2, 3)))
                .setCallback(new SectionedCallback<Integer>() {
                    @Override
                    public void onBindHeader(@NotNull EasyAdapter.Companion.ViewHolder viewHolder, int section) {
                        viewHolder.itemView.setBackgroundColor(Color.BLACK);
                        TextView tv = viewHolder.itemView.findViewById(R.id.textView);
                        tv.setTextColor(Color.WHITE);
                        tv.setText("Header");
                    }

                    @Override
                    public void onBindChild(@NotNull EasyAdapter.Companion.ViewHolder viewHolder, int section, int positionInSection, int position, Integer item) {
                        TextView tv = viewHolder.itemView.findViewById(R.id.textView);
                        tv.setText(item.toString());
                        tv.setTextColor(Color.BLACK);
                        viewHolder.itemView.setBackgroundColor(Color.WHITE);
                    }
                })
                .build());

Kotlin

recyclerView.adapter = EasySectionedAdapter.Builder<Int>()
                .setHeaderLayout(R.layout.row_header)
                .setChildLayout(R.layout.row_list)
                .setDataSet(Arrays.asList(Arrays.asList(1, 2, 3, 4), Arrays.asList(1, 2), Arrays.asList(1, 2, 3)))
                .setCallback(object : SectionedCallback<Int> {
                    override fun onBindHeader(viewHolder: EasyAdapter.Companion.ViewHolder, section: Int) {
                        viewHolder.itemView.setBackgroundColor(Color.BLACK)
                        val tv = viewHolder.itemView.textView
                        tv.setTextColor(Color.WHITE)
                        tv.text = "Header for section $section"
                    }

                    override fun onBindChild(viewHolder: EasyAdapter.Companion.ViewHolder, section: Int, positionInSection: Int, position: Int, item: Int) {
                        val tv = viewHolder.itemView.textView
                        tv.text = item.toString()
                        tv.setTextColor(Color.BLACK)
                        viewHolder.itemView.setBackgroundColor(Color.WHITE)
                    }
                })
                .build()
    }

To update dataset use Adapter.updateDataSet() with your new dataset. For a complete example see sample app