CardView에서 RecyclerView를 사용하여 카드 목록을 표시하고 있습니다. 모든 카드에는 2 개의 linearLayout이 있습니다 (머리글에 1 개, 확장에 1 개, 두 번째 카드가 눌러 진 경우에만 표시됨).FindViewHolderForPosition은 카드가 비전에 없을 때 null을 반환합니다.
카드의 우선 순위를 수정하면 카드가 목록의 새 위치로 이동합니다 (아이템의 "배열"에서 위치가 변경된 후 adapter.notifyItemMoved (oldPosition, newPosition)을 호출 함). 그것은 작동합니다, 나는 또한 RecyclerView.scrollToPosition (newPosition)을 호출하여리스트의 새로운 위치를 보여줍니다.
이제는 문제가 생겼습니다. 새로운 위치로 이동 한 후 카드를 확장하고 싶습니다. 그래서 카드 내부에 linearLayout이 필요합니다. 카드를 보유하고있는 ViewHolder에 있습니다. RecyclerView.findViewHolderAtPosition (newPosition)을 사용하려고하는데 ViewHolder가 반환되는 것은 카드가 "visibleTo"앞에 나오면 항상 "scrollTo"앞에 있었기 때문입니다. )은 (
public void moveTask(int oldPosition, int position, Task task) {
if (oldPosition < position) {
myDataset.add(position, task);
myDataset.remove(oldPosition);
} else {
myDataset.remove(oldPosition);
myDataset.add(position, task);
}
mAdapter.notifyItemMoved(oldPosition, position);
mAdapter.notifyDataSetChanged();
mRecyclerView.smoothScrollToPosition(position);
MyViewHolder holder =(MyViewHolder)mRecyclerView.findViewHolderForPosition(position);
mAdapter.expandCard(holder);
}
이 mAdapter.notifyDataSetChanged 안 (I는 또한 비전에없는 경우에도 내가 올바른 ViewHolder를 기대 그래서 다른 문제를 해결하기 위해 mRecyclerView.setItemViewCacheSize (myDataset.size을()) 사용하고 있습니다) 호출 (notifyItemMoved 충분해야합니다)하지만 때로는 그것 없이는 작동하지 않습니다.
expandCard는 linearLayout "visibility"의 Visibility를 Visible로 설정하고 다른 linearLayout은 "Gone"에 이미 표시되도록 설정합니다.
어떻게 작동합니까? 내가 완전히 잘못하고있는거야? 나는이 문제를 이해하기 쉬운 방식으로 설명하기를 희망한다. 나가 나가 무언가를하고있는 까라고 나 더 잘 설명 할 필요가있는 경우에 나는 항상 여기있다, 도움을 위해 감사.
나는 똑같은 상황에 처해있다. –