Sudah lama juga tidak nulis tentang android. Kali ini kita coba nulis lagi tentang android topik kita kali ii adalah tentang pembuatan RecyclerView yang bisa di tukar posisiny dnegan cara Drag and Drop. Supaya Menarik kita akan buat RecylerView isisnya lirik lagu yang lagi trending yaitu “Aisyah Istri Rasulullah”.
Sekarang mari kita coba buat
1. Buat project baru, pada Project Template pilih “Empty Activity” lalu klik Nextdengan nama “DragDropRecyclerView” lalu klik Finish.

2. Setelah inisialisasi project selesai. Pada Directory res/layout Edit activity_main.xml
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
05 | android:layout_width = "match_parent" |
06 | android:layout_height = "match_parent" |
07 | tools:context = ".MainActivity" > |
09 | < androidx.recyclerview.widget.RecyclerView |
10 | android:id = "@+id/recyclerView" |
11 | android:layout_width = "match_parent" |
12 | android:layout_height = "wrap_content" |
13 | android:orientation = "vertical" |
14 | android:layout_alignParentTop = "true" |
15 | android:layout_alignParentLeft = "true" |
16 | android:layout_alignParentStart = "true" |
17 | app:layoutManager = "androidx.recyclerview.widget.LinearLayoutManager" |
3. Buat layout baru dengan nama item_row_view.xml lalu ketikan kode berikut
01 | <? xml version = "1.0" encoding = "utf-8" ?> |
03 | android:id = "@+id/cardView" |
04 | android:layout_width = "match_parent" |
05 | android:layout_height = "wrap_content" |
06 | android:layout_margin = "5dp" |
10 | android:id = "@+id/relativeLayout" |
11 | android:layout_width = "match_parent" |
12 | android:layout_height = "match_parent" |
13 | android:paddingLeft = "8dp" |
14 | android:paddingTop = "4dp" |
15 | android:paddingBottom = "4dp" |
16 | android:paddingRight = "8dp" > |
19 | android:id = "@+id/txtTitle" |
20 | android:layout_width = "wrap_content" |
21 | android:layout_height = "wrap_content" |
22 | android:layout_centerVertical = "true" |
23 | android:textAppearance = "@style/TextAppearance.AppCompat.Body1" /> |
25 | android:id = "@+id/txtNumber" |
27 | android:layout_width = "35dp" |
28 | android:layout_height = "wrap_content" |
29 | android:layout_alignParentEnd = "true" |
30 | android:layout_alignParentRight = "true" |
31 | android:layout_centerVertical = "true" |
32 | android:gravity = "center" |
33 | android:background = "@drawable/ic_circle" /> |
36 | </ androidx.cardview.widget.CardView > |
Kalau ada error jangan khawatir itu karena ada ressource yang belum kita buat. Untuk membuatnya bisa klik kanan drectory res lalu pilih new–>Image Asset. Seperti gambar dibawah ini

4. Buat Class baru dengan namaRecyclerViewAdapter.java lalu ketikan kode berikut
01 | package net.agusharyanto.dragdroprecyclerview; |
04 | import android.graphics.Color; |
05 | import android.view.LayoutInflater; |
06 | import android.view.View; |
07 | import android.view.ViewGroup; |
08 | import android.widget.TextView; |
10 | import androidx.recyclerview.widget.RecyclerView; |
12 | import java.util.ArrayList; |
13 | import java.util.Collections; |
15 | public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> implements ItemMoveCallback.ItemTouchHelperContract { |
17 | private ArrayList<String> data; |
19 | public class MyViewHolder extends RecyclerView.ViewHolder { |
21 | private TextView mTitle, mNumber; |
24 | public MyViewHolder(View itemView) { |
28 | mTitle = itemView.findViewById(R.id.txtTitle); |
29 | mNumber = itemView.findViewById(R.id.txtNumber); |
34 | public RecyclerViewAdapter(ArrayList<String> data) { |
39 | public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { |
40 | View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_row_view, parent, false ); |
41 | return new MyViewHolder(itemView); |
45 | public void onBindViewHolder(MyViewHolder holder, int position) { |
46 | holder.mTitle.setText(data.get(position)); |
47 | holder.mNumber.setText(position+ 1 + "" ); |
52 | public int getItemCount() { |
58 | public void onRowMoved( int fromPosition, int toPosition) { |
59 | if (fromPosition < toPosition) { |
60 | for ( int i = fromPosition; i < toPosition; i++) { |
61 | Collections.swap(data, i, i + 1 ); |
64 | for ( int i = fromPosition; i > toPosition; i--) { |
65 | Collections.swap(data, i, i - 1 ); |
68 | notifyItemMoved(fromPosition, toPosition); |
72 | public void onRowSelected(MyViewHolder myViewHolder) { |
73 | myViewHolder.rowView.setBackgroundColor(Color.CYAN); |
78 | public void onRowClear(MyViewHolder myViewHolder) { |
79 | myViewHolder.rowView.setBackgroundColor(Color.WHITE); |
5. Buat Class baru lagi dengan nama ItemMoveCallback.java lalu ketikan kode berikut
01 | package net.agusharyanto.dragdroprecyclerview; |
03 | import androidx.annotation.NonNull; |
04 | import androidx.recyclerview.widget.ItemTouchHelper; |
05 | import androidx.recyclerview.widget.RecyclerView; |
07 | public class ItemMoveCallback extends ItemTouchHelper.Callback { |
09 | private final ItemTouchHelperContract mAdapter; |
11 | public ItemMoveCallback(ItemTouchHelperContract adapter) { |
16 | public boolean isLongPressDragEnabled() { |
21 | public boolean isItemViewSwipeEnabled() { |
28 | public void onSwiped( @NonNull RecyclerView.ViewHolder viewHolder, int i) { |
33 | public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { |
34 | int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; |
35 | return makeMovementFlags(dragFlags, 0 ); |
39 | public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, |
40 | RecyclerView.ViewHolder target) { |
41 | mAdapter.onRowMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition()); |
46 | public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, |
50 | if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { |
51 | if (viewHolder instanceof RecyclerViewAdapter.MyViewHolder) { |
52 | RecyclerViewAdapter.MyViewHolder myViewHolder= |
53 | (RecyclerViewAdapter.MyViewHolder) viewHolder; |
54 | mAdapter.onRowSelected(myViewHolder); |
59 | super .onSelectedChanged(viewHolder, actionState); |
62 | public void clearView(RecyclerView recyclerView, |
63 | RecyclerView.ViewHolder viewHolder) { |
64 | super .clearView(recyclerView, viewHolder); |
66 | if (viewHolder instanceof RecyclerViewAdapter.MyViewHolder) { |
67 | RecyclerViewAdapter.MyViewHolder myViewHolder= |
68 | (RecyclerViewAdapter.MyViewHolder) viewHolder; |
69 | mAdapter.onRowClear(myViewHolder); |
73 | public interface ItemTouchHelperContract { |
75 | void onRowMoved( int fromPosition, int toPosition); |
76 | void onRowSelected(RecyclerViewAdapter.MyViewHolder myViewHolder); |
77 | void onRowClear(RecyclerViewAdapter.MyViewHolder myViewHolder); |
6. Lalu kita edit class MainActivity.java lalu ketikan kode berikut
01 | package net.agusharyanto.dragdroprecyclerview; |
03 | import android.os.Bundle; |
05 | import androidx.appcompat.app.AppCompatActivity; |
06 | import androidx.recyclerview.widget.ItemTouchHelper; |
07 | import androidx.recyclerview.widget.RecyclerView; |
09 | import java.util.ArrayList; |
11 | public class MainActivity extends AppCompatActivity { |
12 | RecyclerView recyclerView; |
13 | RecyclerViewAdapter mAdapter; |
14 | ArrayList<String> lyricArrayList = new ArrayList<>(); |
17 | protected void onCreate(Bundle savedInstanceState) { |
18 | super .onCreate(savedInstanceState); |
19 | setContentView(R.layout.activity_main); |
21 | recyclerView = findViewById(R.id.recyclerView); |
23 | populateRecyclerView(); |
26 | private void populateRecyclerView() { |
27 | lyricArrayList.add( "Mulia indah cantik berseri" ); |
28 | lyricArrayList.add( "Kulit putih bersih merahnya pipimu" ); |
29 | lyricArrayList.add( "Dia aisyah putri abu bakar" ); |
30 | lyricArrayList.add( "Istri rasulullah" ); |
31 | lyricArrayList.add( "Sungguh sweet nabi mencintamu" ); |
32 | lyricArrayList.add( "Hingga nabi minum di bekas bibirmu" ); |
33 | lyricArrayList.add( "Bila marah nabi kan memanja" ); |
34 | lyricArrayList.add( "Mencubit hidungnya" ); |
37 | mAdapter = new RecyclerViewAdapter(lyricArrayList); |
39 | ItemTouchHelper.Callback callback = |
40 | new ItemMoveCallback(mAdapter); |
41 | ItemTouchHelper touchHelper = new ItemTouchHelper(callback); |
42 | touchHelper.attachToRecyclerView(recyclerView); |
44 | recyclerView.setAdapter(mAdapter); |
Perhatikan pengisian data ArrayList diatas itu saya isi dengan sebagian lirik lagu yang lagi Trending di Youtube yaitu lagu Aisyah Istri Rasulullah.
7. Jangan Lupa di bagian Gradle Script – Module:App pada bain dependencies tambahkan library untuk recyclerview dan cardview
implementation ‘androidx.recyclerview:recyclerview:1.1.0’
implementation ‘androidx.cardview:cardview:1.0.0’
8. Jalankan Aplikasi, jika sudah tidak ada error maka akan tampil seperti ini.

Tentunya dari sini kita akan punya ide untuk buat aplikasi android yang memanfaatkan fungsi Drag and Drop Items RecyclerView ini.
Semoga bermanfaat.
Salam Hangat Developer Android
Agus Haryanto
Referensi
https://www.journaldev.com/
Untuk Lirik Lagu Aisyah Putri Rasulullah
Judul Lagu: Aisyah Istri Rasulullah
Komposisi: Razif Bin Zainuddin (Razif)/ Projector Band
Adaptasi Lirik: Hasbi Bin Haji Muh. Ali (Mr. Bie)
Leave a Reply