2014-11-20 4 views
4

Поэтому, когда я добавляю элемент, он не оживляет его, и он не прокручивается до правильной позиции. Однако при удалении объекта он будет анимировать удаление объекта.RecylerView не анимирующая вставка, но она делает анимированное удаление

Вот добавить код:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if(requestCode == NEWITEMREQUESTCODE && resultCode == Activity.RESULT_OK) { 
      // AFTER CREATING A NEW ITEM 
      OilChangeableItem oilChangeableItem = data.getParcelableExtra("oil_item"); 
      // Add the new item and notify the dataset. 
      oilChangeableAdapter.notifyItemInserted(0); 
      items.add(0, oilChangeableItem); 
     } else if (requestCode == EDITITEMRESULTCODE && resultCode == Activity.RESULT_OK) { 
      // AFTER EDITING AN ITEM 
      OilChangeableItem oilChangeableItem = data.getParcelableExtra("oil_item"); 
      // Replace the existing item at whatever position it was originally at and notify the dataset. 
      oilChangeableAdapter.notifyItemChanged(data.getIntExtra("item_position", 0)); 
      items.set(data.getIntExtra("item_position", 0), oilChangeableItem); 
     } 
    } 

А вот код удаления:

final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
        builder.setTitle(R.string.dialog_delete_title); 
        builder.setIcon(R.drawable.ic_action_warning); 
        builder.setMessage(R.string.dialog_delete_message); 

        builder.setPositiveButton(R.string.button_text_delete, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          // Removed the selected item 
          oilChangeableAdapter.notifyItemRemoved(oilChangeableAdapter.getSelectedViewPosition()); 
          items.remove(oilChangeableAdapter.getSelectedViewPosition()); 
          // Notify the user it has been removed. 
          Toast.makeText(getActivity(), R.string.toast_item_deleted, Toast.LENGTH_SHORT).show(); 
         } 
        }); 
        builder.setNegativeButton(R.string.button_text_cancel, new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 

         } 
        }); 
       builder.create(); 
       builder.show(); 
       mode.finish(); 

Кто-нибудь есть какие-нибудь идеи?

+0

Почему вы называете 'notifyItemInserted' перед тем, как на самом деле вставить элемент? – rciovati

+0

@rciovati Я уже пробовал это, и он все еще не работает: P –

ответ

8

Это потому, что вы добавляете элемент «выше» в настоящее время видимые элементы.

Я понимаю, что это выглядит неожиданным, если вы думаете о первой позиции, но если RV показывал элементы от 5 до 10, и новый пункт добавляется в позицию 2, вы действительно не хотите, чтобы ваш список перемещался с 4 на 9 .

Таким образом, LinearLayoutManager сохраняет это простое, если элемент добавлен выше или ниже списка, он не перемещается (чтобы UX был согласован).

Если вы хотите, чтобы он отображал позицию 0, когда вы добавляете элемент в позицию 0, вызовите recyclerView.scrollToPosition (0) после добавления элемента. Я думаю, что вы действительно хотите:

items.add(0, oilChangeableItem);  
oilChangeableAdapter.notifyItemInserted(0); 
if (layoutManager.findFirstCompletelyVisibleItemPosition() == 0) { 
    layoutManager.scrollToPosition(0); 
} 
+0

Таким образом, он будет прокручиваться до элемента, но он все равно не будет анимировать элемент, затухающий, как это происходит при удалении элемента. –

+0

Хм это должно быть, если вы вызываете свиток в позицию. Что вы видите? Это просто прыгает и не оживляет какого-либо взгляда? – yigit

+0

Да, он просто подпрыгнет. Или, если я просто добавлю элемент в первый раз, он просто появится и не исчезнет. –

 Смежные вопросы

  • Нет связанных вопросов^_^