'Recycler View List Sort position saving notepad app
In my program I added code to move the list items around but for example if I move shopping list above Test 123 and fully close the app the positioning resets to the original instead of the updated location I cannot figure out for the life of me what to do.
Code for click drag in mainactivity.java
//Click drag Notes feature *****************************************************
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.getBindingAdapterPosition();
int toPosition = target.getBindingAdapterPosition();
Collections.swap(notesList, fromPosition, toPosition);
Objects.requireNonNull(recyclerView.getAdapter()).notifyItemMoved(fromPosition, toPosition);
return false;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) {
}
@Override //This forces arrangement up or down not any direction
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
return makeMovementFlags(dragFlags, 0);
}
};
//******************************************* Click Drag Notes ***************************************
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(simpleCallback);
itemTouchHelper.attachToRecyclerView(recyclerView);
ItemTouchHelper helper = new ItemTouchHelper(callback);
helper.attachToRecyclerView(recyclerView);
//
notesList = new ArrayList<>();
databaseClass = new
DatabaseClass(this);
fetchAllNotesFromDatabase();
recyclerView.setLayoutManager(new
LinearLayoutManager(this));
adapter = new
Adapter(this, MainActivity.this, notesList);
recyclerView.setAdapter(adapter);
}
Adapter Code
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view_layout, parent, false);
return new MyViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) {
holder.title.setText(notesList.get(position).getTitle());
holder.description.setText(notesList.get(position).getDescription());
holder.layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(context, UpdateNotesActivity.class);
intent.putExtra("title", notesList.get(position).getTitle());
intent.putExtra("description", notesList.get(position).getDescription());
intent.putExtra("id", notesList.get(position).getId());
activity.startActivity(intent);
}
});
}
@Override
public int getItemCount() {
return notesList.size();
}
@Override
public Filter getFilter() {
return exampleFilter;
}
private Filter exampleFilter = new Filter() {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Model> filteredList = new ArrayList<>();
if (constraint == null || constraint.length() == 0) {
filteredList.addAll(newList);
} else {
String filterPattern = constraint.toString().toLowerCase().trim();
for (Model item : newList) {
if (item.getTitle().toLowerCase().contains(filterPattern)) {
filteredList.add(item);
}
}
}
FilterResults results = new FilterResults();
results.values = filteredList;
return results;
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
notesList.clear();
notesList.addAll((List) results.values);
notifyDataSetChanged();
}
};
public class MyViewHolder extends RecyclerView.ViewHolder {
private static final String TAG = "MyViewHolder";
TextView title, description, textView;
ImageButton imageButton;
RelativeLayout layout;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
title = itemView.findViewById(R.id.title);
description = itemView.findViewById(R.id.description);
layout = itemView.findViewById(R.id.note_layout);
}
}
public List<Model> getList() {
return notesList;
}
public void removeItem(int position) {
notesList.remove(position);
notifyItemRemoved(position);
}
public void restoreItem(Model item, int position) {
notesList.add(position, item);
notifyItemInserted(position);
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|