I have the Drag and drop cardview function inside a recyclerview but I want the CardView to have the updated position when I close the application and reopen it. I have no intention of adding more cardView, it will only be three. I really appreciate the help in advance
MainActivity This is my main code in which I add the ItemTouchHelper.SimpleCallBack function to add my drag and drop function.
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
VersionAdapter versionAdapter;
List<Versions> versionsList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView = findViewById(R.id.recyclerView);
versionAdapter = new VersionAdapter(versionsList);
initData();
setRecyclerView();
DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
recyclerView.addItemDecoration(dividerItemDecoration);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
}
private void setRecyclerView() {
VersionAdapter versionAdapter = new VersionAdapter(versionsList);
recyclerView.setAdapter(versionAdapter);
recyclerView.setHasFixedSize(true);
}
private void initData() {
versionsList = new ArrayList<>();
versionsList.add(new Versions("CardView1","Information CardView1"));
versionsList.add(new Versions("CardView2","Information CardView2"));
versionsList.add(new Versions("CardView3","InformationCardView3"));
}
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(versionsList, fromPosition, toPosition);
recyclerView.getAdapter().notifyItemMoved(fromPosition, toPosition);
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
}
};
Adapter This is my adapter for the RecyclerView, it also mentions that cardviews have a function to expand them.
public class VersionAdapter extends RecyclerView.Adapter<VersionAdapter.VersionVH> {
List<Versions> versionsList;
public VersionAdapter(List<Versions> versionsList) {
this.versionsList = versionsList;
}
@NonNull
@Override
public VersionVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.raw_item, parent, false);
return new VersionVH(view);
}
@Override
public void onBindViewHolder(@NonNull VersionVH holder, int position) {
Versions versions = versionsList.get(position);
holder.titulo.setText(versions.getCodeTitulo());
holder.subtitulo.setText(versions.getCodeSubtitulo());
boolean isExpandable = versionsList.get(position).isExpandible();
holder.relativeLayoutExpandir.setVisibility(isExpandable ? View.VISIBLE : View.GONE);
}
@Override
public int getItemCount() {
return versionsList.size();
}
public class VersionVH extends RecyclerView.ViewHolder {
TextView titulo, subtitulo;
LinearLayout linearLayout;
RelativeLayout relativeLayoutExpandir;
public VersionVH(@NonNull View itemView) {
super(itemView);
titulo = itemView.findViewById(R.id.textoUno);
subtitulo = itemView.findViewById(R.id.txtexpand);
linearLayout = itemView.findViewById(R.id.linear_layout);
relativeLayoutExpandir = itemView.findViewById(R.id.relative_layout);
linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Versions versions = versionsList.get(getAdapterPosition());
versions.setExpandible(!versions.isExpandible());
notifyItemChanged(getAdapterPosition());
}
});
}
}