2017-01-10 3 views
0

나는 GridManagerLayout으로 RecyclerView을 만들었습니다.Recycler보기 카테고리별로 항목 정렬

간편성을 위해 내 카드는 2 차원, ID 및 희귀 성을가집니다. 나는 그들의 ID 또는 희소성에 의해 그리드에 카드를 배열하는 버튼을 갖고 싶습니다. 카드를 움직여 새로운 위치로 움직일 수 있도록하기 위해 내가해야 할 일은 무엇이겠습니까?

버튼을 눌렀을 때 ArrayList을 새로 작성하려고 시도한 후 notifydDatasetChanged(). 항목의 위치가 올바르게 전환되지만 애니메이션이 없습니다. 즉, 새 위치 효과에 "이동" 이 아닌 카드가 다시 채워집니다. 현재 목록을 변경하는 대신 새로운 ArrayList을 정의하고 있으므로이 경우라고 생각합니다.

나는 이것을하기 위해 Collections.swap을 사용해야한다고하는 또 다른 글을 읽었습니다. 이것이 내가 추구해야하는 것인지 확실하지 않습니다.

어떤 조언이 필요합니까?

답변

0

나는 하나의 해결책을 가지고 있습니다!

이 방법은 RecyclerView 어댑터 안에 작성하십시오.

public void addItemList(List<JobListApi.Job> newlyCreatedList) { 
    int lastPosition = this.mainItemList.size(); 
    this.mainItemList.addAll(newlyCreatedList); 
    this.notifyItemRangeInserted(lastPosition, newlyCreatedList.size()); 
} 

새로 작성한 ArrayList으로이 메소드를 호출하십시오.

희망이 당신을 위해 작동합니다.

+0

저는 이것을 시도하지는 않았지만 단지 그것을 보았습니다. 이전 배열의 맨 위에 추가 했습니까? 내 원래 목록에있는 항목을 복제할까요? –

+0

@ImranHamid 예, 그렇습니다! 하지만 새 목록을 추가하기 전에 원본을 지울 수 있습니다. 나는 당신의 애니메이션 문제를 해결하려고 노력했을뿐입니다. –

+0

도움을 주셔서 감사합니다! 나는'notifyItemMoved()'를 사용하면'Collections.swap'을 사용할 때 위치 이동 애니메이션을 처리한다는 것을 깨달았습니다. –

0

나는이 문제를 해결할 수있었습니다. 누구나 대답이 필요하면 notifyItemMoved()을 사용하십시오. notifyItemRangeChanged(position,getItemCount)