Skip to content

Instantly share code, notes, and snippets.

@omeraydindev
Last active May 29, 2022 16:55
Show Gist options
  • Save omeraydindev/209793d25d7933607f15d247ce46fc21 to your computer and use it in GitHub Desktop.
Save omeraydindev/209793d25d7933607f15d247ce46fc21 to your computer and use it in GitHub Desktop.

Revisions

  1. omeraydindev revised this gist May 29, 2022. 1 changed file with 4 additions and 2 deletions.
    6 changes: 4 additions & 2 deletions FastAdapter.java
    Original file line number Diff line number Diff line change
    @@ -1,5 +1,7 @@
    package com.test;

    /*
    * This is free and unencumbered software released into the public domain.
    * For more information, please refer to <http://unlicense.org/>
    */
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
  2. omeraydindev revised this gist May 29, 2022. No changes.
  3. omeraydindev revised this gist May 29, 2022. No changes.
  4. omeraydindev revised this gist May 29, 2022. No changes.
  5. omeraydindev revised this gist May 29, 2022. 2 changed files with 0 additions and 12 deletions.
    1 change: 0 additions & 1 deletion !FastAdapter.java
    Original file line number Diff line number Diff line change
    @@ -1 +0,0 @@
    //
    11 changes: 0 additions & 11 deletions ExampleUsage.kt
    Original file line number Diff line number Diff line change
    @@ -1,11 +0,0 @@
    FastAdapter(this, R.layout.item_stat_lv, list) { rootView, item, _ ->
    ItemStatLvBinding.bind(rootView).apply {
    deviceId.text = item.deviceId
    type.text = item.type
    time.text = item.time
    date.text = item.date
    country.text = item.country
    }
    }.into(binding.recyclerView)

    binding.recyclerView.layoutManager = LinearLayoutManager(context)
  6. omeraydindev revised this gist May 29, 2022. 1 changed file with 1 addition and 0 deletions.
    1 change: 1 addition & 0 deletions !FastAdapter.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    //
  7. omeraydindev created this gist May 29, 2022.
    11 changes: 11 additions & 0 deletions ExampleUsage.kt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,11 @@
    FastAdapter(this, R.layout.item_stat_lv, list) { rootView, item, _ ->
    ItemStatLvBinding.bind(rootView).apply {
    deviceId.text = item.deviceId
    type.text = item.type
    time.text = item.time
    date.text = item.date
    country.text = item.country
    }
    }.into(binding.recyclerView)

    binding.recyclerView.layoutManager = LinearLayoutManager(context)
    116 changes: 116 additions & 0 deletions FastAdapter.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,116 @@
    package com.test;

    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;

    import androidx.annotation.NonNull;
    import androidx.recyclerview.widget.ItemTouchHelper;
    import androidx.recyclerview.widget.RecyclerView;

    import java.util.ArrayList;
    import java.util.Collections;

    public class FastAdapter<T> {
    private final RVAdapter adapter;

    public FastAdapter(Context context, int resource, ArrayList<T> data, BindListener<T> bindListener) {
    adapter = new RVAdapter(context, resource, data, bindListener);
    }

    public void into(RecyclerView recyclerView) {
    into(recyclerView, false);
    }

    public void into(RecyclerView recyclerView, boolean dragDrop) {
    recyclerView.setAdapter(adapter);

    if (dragDrop) {
    attachDragDrop(recyclerView);
    }
    }

    public ArrayList<T> getList() {
    return adapter.mData;
    }

    public void refresh() {
    adapter.notifyDataSetChanged();
    }

    public interface BindListener<T> {
    void onBind(View rootView, T item, int pos);
    }

    private void attachDragDrop(RecyclerView recyclerView) {

    ItemTouchHelper.SimpleCallback simpleCallback = new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.START | ItemTouchHelper.END, 0) {
    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {

    int fromPosition = viewHolder.getAdapterPosition();
    int toPosition = target.getAdapterPosition();

    Collections.swap(adapter.mData, fromPosition, toPosition);
    recyclerView.getAdapter().notifyItemMoved(fromPosition, toPosition);

    return false;
    }

    @Override
    public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {}
    };

    ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
    itemTouchHelper.attachToRecyclerView(recyclerView);
    }

    private class RVAdapter extends RecyclerView.Adapter<RVAdapter.ViewHolder> {
    private final int resource;
    public final ArrayList<T> mData;
    private final LayoutInflater mInflater;
    private final BindListener<T> bindListener;

    public RVAdapter(Context context, int resource, ArrayList<T> data, BindListener<T> bindListener) {
    this.resource = resource;
    this.mInflater = LayoutInflater.from(context);
    this.mData = data;
    this.bindListener = bindListener;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = mInflater.inflate(resource, parent, false);
    return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    T item = getItem(position);

    bindListener.onBind(holder.root, item, position);
    }

    @Override
    public int getItemCount() {
    return mData.size();
    }

    private class ViewHolder extends RecyclerView.ViewHolder {
    View root;

    ViewHolder(View itemView) {
    super(itemView);

    root = itemView;
    }
    }

    T getItem(int id) {
    return mData.get(id);
    }
    }

    }