Android ошибка при попытке sawp карточек
Пытаюсь сделать drag and drop вместе с ArrayList и при попытке поменять местами карточки, приложение крашиться. Помогите решить ошибку.
Ошибка
java.lang.NullPointerException: Attempt to read from null array
at com.example.myapplication.ui.News_Favorites.FavCardItemTouchHelperCallback.swapCards(FavCardItemTouchHelperCallback.java:43)
at com.example.myapplication.ui.News_Favorites.FavCardItemTouchHelperCallback.onMove(FavCardItemTouchHelperCallback.java:34)
at androidx.recyclerview.widget.ItemTouchHelper.moveIfNecessary(ItemTouchHelper.java:881)
at androidx.recyclerview.widget.ItemTouchHelper$2.onTouchEvent(ItemTouchHelper.java:387)
FavCardItemTouchHelperCallback
public class FavCardItemTouchHelperCallback extends ItemTouchHelper.Callback {
private static final int DRAG_FLAGS = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
private static final int SWIPE_FLAGS = 0;
private final FavoritesAdapter favoritesAdapter;
FavCardItemTouchHelperCallback(FavoritesAdapter favoritesAdapter) {
this.favoritesAdapter = favoritesAdapter;
}
@Override
public int getMovementFlags(
@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
return makeMovementFlags(DRAG_FLAGS, SWIPE_FLAGS);
}
@Override
public boolean onMove(
@NonNull RecyclerView recyclerView,
@NonNull RecyclerView.ViewHolder viewHolder,
@NonNull RecyclerView.ViewHolder target) {
int fromPosition = viewHolder.getAdapterPosition();
int toPosition = target.getAdapterPosition();
swapCards(fromPosition, toPosition, favoritesAdapter);
return true;
}
@Override
public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction)
{
}
static void swapCards(int fromPosition, int toPosition, FavoritesAdapter favoritesAdapter) {
int fromNumber = favoritesAdapter.cardNumbers[fromPosition];
favoritesAdapter.cardNumbers[fromPosition] = favoritesAdapter.cardNumbers[toPosition];
favoritesAdapter.cardNumbers[toPosition] = fromNumber;
favoritesAdapter.notifyItemMoved(fromPosition, toPosition);
}
}
Адаптер (FavoritesAdapter)
public class FavoritesAdapter extends RecyclerView.Adapter<FavoritesAdapter.FavoritesViewHolder> {
public int[] cardNumbers;
private ArrayList<FavoritesItem> mFavList;
private ItemTouchHelper itemTouchHelper;
public static class FavoritesViewHolder extends RecyclerView.ViewHolder {
public ImageView mImageView;
public TextView mTextView1;
public FavoritesViewHolder(View itemView) {
super(itemView);
mImageView = itemView.findViewById(R.id.card_img_2);
mTextView1 = itemView.findViewById(R.id.card_txt);
}
}
public FavoritesAdapter(ArrayList<FavoritesItem> favList) {
mFavList = favList;
}
@NonNull
@Override
public FavoritesViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.fragment_card, parent, false);
return new FavoritesAdapter.CardViewHolder(view);
}
@Override
public void onBindViewHolder(FavoritesAdapter.FavoritesViewHolder holder, int position) {
((FavoritesAdapter.CardViewHolder) holder).bind(itemTouchHelper);
FavoritesItem currentItem = mFavList.get(position);
holder.mImageView.setImageResource(currentItem.getImg());
holder.mTextView1.setText(currentItem.getTxt());
}
@Override
public int getItemCount() {
return mFavList.size();
}
public static class FavoritesItem {
private int mImg;
private String mTxt;
public FavoritesItem(int img, String txt) {
mImg = img;
mTxt = txt;
}
public int getImg() {
return mImg;
}
public String getTxt() {
return mTxt;
}
}
void setItemTouchHelper(ItemTouchHelper itemTouchHelper) {
this.itemTouchHelper = itemTouchHelper;
}
private static class CardViewHolder extends FavoritesViewHolder {
private final View dragHandleView;
private CardViewHolder(View itemView) {
super(itemView);
dragHandleView = itemView.findViewById(R.id.card_img);
}
@SuppressLint("ClickableViewAccessibility")
private void bind(final ItemTouchHelper itemTouchHelper) {
dragHandleView.setOnTouchListener(
(v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
itemTouchHelper.startDrag(FavoritesAdapter.CardViewHolder.this);
return true;
}
return false;
});
}
}
}
Fragment (FavoritesTabs)
public class FavoritesTabs extends Fragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_favorites_tabs, container, false);
}
@Override
public void onViewCreated(@NonNull final View view, @Nullable Bundle savedInstanceState) {
ArrayList<FavoritesAdapter.FavoritesItem> exampleList = new ArrayList<>();
exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_anim_main_22, "Line 1"));
exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_notifications_black_24dp, "Line 5"));
exampleList.add(new FavoritesAdapter.FavoritesItem(R.drawable.ic_anim_handbook_37, "Line 6"));
RecyclerView mRec = requireView().findViewById(R.id.card_recy_f);
mRec.setHasFixedSize(true);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getContext());
FavoritesAdapter mAdapter = new FavoritesAdapter(exampleList);
mRec.setLayoutManager(mLayoutManager);
mRec.setAdapter(mAdapter);
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(new FavCardItemTouchHelperCallback(mAdapter));
mAdapter.setItemTouchHelper(itemTouchHelper);
itemTouchHelper.attachToRecyclerView(mRec);
}
}