public class TestAdapter extends RecyclerView.Adapter<TestAdapter.ViewHolder> {
private List<String> lists;
private OnItemMoveClickListener mOnItemMoveClickListener;
public void setLists(List<String> list) {
lists = list;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_test, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.tv_content.setText("aaa");
holder.tv_num.setText(String.valueOf(position));
holder.tv_content.setOnClickListener(view -> {
if (mOnItemMoveClickListener != null) {
mOnItemMoveClickListener.onMoveClick(position, 0);
}
});
}
@Override
public int getItemCount() {
return lists.size();
}
public void setOnItemMoveClickListener(
OnItemMoveClickListener listener) {
this.mOnItemMoveClickListener = listener;
}
public interface OnItemMoveClickListener {
void onMoveClick(int fromPosition, int toPosition);
}
public List<String> getLists() {
return lists;
}
static class ViewHolder extends RecyclerView.ViewHolder {
private TextView tv_content;
private TextView tv_num;
ViewHolder(@NonNull View itemView) {
super(itemView);
tv_content = itemView.findViewById(R.id.tv_item_content);
tv_num = itemView.findViewById(R.id.tv_item_num);
}
}
}
public class MainActivity extends AppCompatActivity {
private RecyclerView recyclerView;
@SuppressLint("MissingInflatedId")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.rv_content);
List<String> list = new ArrayList<>();
for (int i=0; i<10; i++) {
list.add("aa");
}
TestAdapter testAdapter = new TestAdapter();
testAdapter.setLists(list);
testAdapter.setOnItemMoveClickListener((fromPosition, toPosition) -> {
testAdapter.notifyItemMoved(fromPosition, toPosition);
for (int i = fromPosition; i > toPosition; i--) {
Collections.swap(testAdapter.getLists(), i, i - 1);
}
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
testAdapter.setLists(list);
testAdapter.notifyDataSetChanged();
}
},250);
});
recyclerView.setAdapter(testAdapter);
}
}