Ведение позиции Drag & Dropped при перезапуске

У меня есть RecyclerView – Grid, с помощью drag & drop, используя этот код, которому я этого добился, и сделал много изменений, только одна проблема, я не могу сохранить позицию перетаскиваемых элементов при перезапуске (приложение не Телефон ). Я думал о добавлении «int position» к моему конструктору item.java, но то, что я не могу сделать, это получить измененную позицию.

Я использую те же коды перетаскивания и удаления, указанные в ссылке.

ItemTouchHelper.Callback _ithCallback = new ItemTouchHelper.Callback() { //and in your imlpementaion of public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { // get the viewHolder's and target's positions in your adapter data, swap them Collections.swap(AllItems, viewHolder.getAdapterPosition(), target.getAdapterPosition()); // and notify the adapter that its dataset has changed rcAdapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition()); return true; } @Override public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { //TODO } //defines the enabled move directions in each state (idle, swiping, dragging). @Override public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { return makeFlag(ItemTouchHelper.ACTION_STATE_DRAG, ItemTouchHelper.DOWN | ItemTouchHelper.UP | ItemTouchHelper.START | ItemTouchHelper.END); } }; 

Вот код в onCreate:

  ItemTouchHelper ith = new ItemTouchHelper(_ithCallback); ith.attachToRecyclerView(RcView); 

Получение дублированных элементов после изменения позиции, Код:

  @Override public void onStop() { super.onStop(); SharedPreferencesTools.setOrderedItems(this, AllItems); } 

GetAllItemList:

 private List<Item> getAllItemList(){ AllItems = SharedPreferencesTools.getOrderedItems(this); //Add item .. etc //return items 

}

Просто сохраните измененную коллекцию AllItems в SharedPreferences и загрузите ее в начало приложения и сохраните ее, как только вы выйдете из приложения.

Для этого вам необходимо сериализовать свою коллекцию в json от Gson и сохранить как String . И затем десериализуйте его потом:

 public final class SharedPreferencesTools { private static final String USER_SETTINGS_PREFERENCES_NAME = "UserSettings"; private static final String ALL_ITEMS_LIST = "AllItemsList"; private static Gson gson = new GsonBuilder().create(); public static List<Item> getOrderedItems(Context context) { String stringValue = getUserSettings(context).getString(ALL_ITEMS_LIST, ""); Type collectionType = new TypeToken<List<Item>>() { }.getType(); List<Item> result = gson.fromJson(stringValue, collectionType); return (result == null) ? new ArrayList<Item>() : result; } public static void setOrderedItems(Context context, List<Item> items) { String stringValue = gson.toJson(items); SharedPreferences sharedPreferences = getUserSettings(context); SharedPreferences.Editor editor = sharedPreferences.edit(); editor.putString(ALL_ITEMS_LIST, stringValue); editor.apply(); } static SharedPreferences getUserSettings(Context context) { return context.getSharedPreferences(USER_SETTINGS_PREFERENCES_NAME, Context.MODE_PRIVATE); } } 

Использование этих двух методов:

  SharedPreferencesTools.setOrderedItems(getActivity(), AllItems); ... List<Item> AllItems = SharedPreferencesTools.getOrderedItems(getActivity());