Java Recycler Item Touch Helper在.onChildRaw中生成空值

Java Recycler Item Touch Helper在.onChildRaw中生成空值,java,android,android-recyclerview,Java,Android,Android Recyclerview,我的应用程序中有一个通过截击填充的回收器视图,我从RESTAPI获得一些餐馆的名称和地址。我想在我的应用程序中滑动删除,所以我使用了Item Touch helper,但我不知道为什么会出现此错误。我对安卓有点陌生。请帮忙 我的助手 public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback { private RecyclerItemTouchHelperListener listener;

我的应用程序中有一个通过截击填充的回收器视图,我从RESTAPI获得一些餐馆的名称和地址。我想在我的应用程序中滑动删除,所以我使用了Item Touch helper,但我不知道为什么会出现此错误。我对安卓有点陌生。请帮忙

我的助手

public class RecyclerItemTouchHelper extends ItemTouchHelper.SimpleCallback {

    private RecyclerItemTouchHelperListener listener;

    public RecyclerItemTouchHelper(int dragDirs, int swipeDirs, RecyclerItemTouchHelperListener listener) {
        super(dragDirs, swipeDirs);
        this.listener = listener;
    }

    @Override
    public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) {
        return true;
    }

    @Override
    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
        if (viewHolder != null) {
            final View foregroundView = ((RestaurantAdapter.MyViewHolder) viewHolder).viewForeground;

            getDefaultUIUtil().onSelected(foregroundView);
        }
    }

    @Override
    public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
                                RecyclerView.ViewHolder viewHolder, float dX, float dY,
                                int actionState, boolean isCurrentlyActive) {
        final View foregroundView = ((RestaurantAdapter.MyViewHolder) viewHolder).viewForeground;
        getDefaultUIUtil().onDrawOver(c, recyclerView, foregroundView, dX, dY,
                actionState, isCurrentlyActive);
    }

    @Override
    public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
        final View foregroundView = ((RestaurantAdapter.MyViewHolder) viewHolder).viewForeground;
        getDefaultUIUtil().clearView(foregroundView);
    }

    @Override
    public void onChildDraw(Canvas c, RecyclerView recyclerView,
                            RecyclerView.ViewHolder viewHolder, float dX, float dY,
                            int actionState, boolean isCurrentlyActive) {
        final View foregroundView = ((RestaurantAdapter.MyViewHolder) viewHolder).viewForeground;

        getDefaultUIUtil().onDraw(c, recyclerView, foregroundView, dX, dY,
                actionState, isCurrentlyActive);
    }

    @Override
    public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
        listener.onSwiped(viewHolder, direction, viewHolder.getAdapterPosition());
    }

    @Override
    public int convertToAbsoluteDirection(int flags, int layoutDirection) {
        return super.convertToAbsoluteDirection(flags, layoutDirection);
    }


    public interface RecyclerItemTouchHelperListener {
        void onSwiped(RecyclerView.ViewHolder viewHolder, int direction, int position);
    }
我的回收器适配器类

public class RestaurantAdapter extends RecyclerView.Adapter<RestaurantAdapter.MyViewHolder> implements View.OnClickListener {

    private List<Restaurant> restaurantList;
    private Context context;
    private int position;


    public int getPosition() {return position;}

    public void setPosition(int position) { this.position = position;}

    public RestaurantAdapter(List<Restaurant> restaurantList, Context context){
        this.restaurantList = restaurantList;
        this.context = context;
    }

    @Override
    public void onClick(View view){
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnCreateContextMenuListener {
        TextView listviewName,listviewAddress;
        ImageView icon,noteIcon;
        public RelativeLayout viewBackground, viewForeground;

        MyViewHolder(View view){
            super(view);
            listviewName = view.findViewById(R.id.listview_name);
            listviewAddress = view.findViewById(R.id.listview_address);
            icon = view.findViewById(R.id.type_ic);
            noteIcon = view.findViewById(R.id.note_icon);
            viewBackground = view.findViewById(R.id.view_background);
            viewForeground = view.findViewById(R.id.view_foreground);
            view.setOnCreateContextMenuListener(this);
        }
        @Override
        public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo) {
            AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
            menu.add(0, 1, 0, "Edit");
            menu.add(0, 2, 1, "Remove");
            menu.add(0, 3, 2, "Add Note");
            menu.add(0, 4, 3, "All Notes");
        }
    }
    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_layout,parent,false);
        Animation animation = AnimationUtils.loadAnimation(context, R.anim.fadein);
        itemView.startAnimation(animation);
        return new MyViewHolder(itemView);
    }
    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {

        holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                setPosition(holder.getAdapterPosition());
                return false;
            }
        });
        Restaurant restaurant = restaurantList.get(position);
        holder.listviewName.setText(restaurant.getName());
        holder.listviewAddress.setText(restaurant.getAddress());
        switch (restaurant.getImage()) {
            case RestaurantContract.EntryRestaurants.RESTAURANT_TYPE_DELIVERY:
                holder.icon.setImageResource(R.drawable.phoneorderr);
                break;
            case RestaurantContract.EntryRestaurants.RESTAURANT_TYPE_SITDOWN:
                holder.icon.setImageResource(R.drawable.sitdownn);
                break;
            case RestaurantContract.EntryRestaurants.RESTAURANT_TYPE_TAKEAWAY:
                holder.icon.setImageResource(R.drawable.takeaway);
                break;
        }
        holder.noteIcon.setImageResource(R.drawable.notepadicon);
        if(restaurant.isHasNote()) {
            holder.noteIcon.setVisibility(View.VISIBLE);
        }else {
            holder.noteIcon.setVisibility(View.INVISIBLE);
        }

    }
    @Override
    public int getItemCount() {
        return restaurantList.size();
    }

    public void removeItem(int position){
        restaurantList.remove(position);
        notifyItemRemoved(position);
    }

    public void restoreItem(Restaurant restaurant, int position){
        restaurantList.add(position,restaurant);
        notifyItemInserted(position);
    }
}
还有我的logcat

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.view.View.getTag(int)' on a null object reference
        at androidx.recyclerview.widget.ItemTouchUIUtilImpl.onDraw(ItemTouchUIUtilImpl.java:38)
        at com.test.fastfoodfinder.Restaurant.RecyclerItemTouchHelper.onChildDraw(RecyclerItemTouchHelper.java:54)
        at androidx.recyclerview.widget.ItemTouchHelper$Callback.onDraw(ItemTouchHelper.java:1989)
        at androidx.recyclerview.widget.ItemTouchHelper.onDraw(ItemTouchHelper.java:561)
        at androidx.recyclerview.widget.RecyclerView.onDraw(RecyclerView.java:4284)
        at android.view.View.draw(View.java:19192)


您确定此
视图.findViewById(R.id.view\u前台)
未返回
null
?@BenP。我不知道该怎么感谢你,问题出在前台谢谢
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.view.View.getTag(int)' on a null object reference
        at androidx.recyclerview.widget.ItemTouchUIUtilImpl.onDraw(ItemTouchUIUtilImpl.java:38)
        at com.test.fastfoodfinder.Restaurant.RecyclerItemTouchHelper.onChildDraw(RecyclerItemTouchHelper.java:54)
        at androidx.recyclerview.widget.ItemTouchHelper$Callback.onDraw(ItemTouchHelper.java:1989)
        at androidx.recyclerview.widget.ItemTouchHelper.onDraw(ItemTouchHelper.java:561)
        at androidx.recyclerview.widget.RecyclerView.onDraw(RecyclerView.java:4284)
        at android.view.View.draw(View.java:19192)