Save cardView position on drag and drop inside RecyclerView when closing mobile app

Viewed 17

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());
            }
        });
    }
}
0 Answers
Related