Recycler view - нажатие кнопки не работает и показывает ошибку mView not found. нужна помощь - PullRequest
0 голосов
/ 27 марта 2020

Я новичок в android разработке. Мой RecyclerView работает и показывает необходимый макет, но возникает проблема, когда я пытаюсь увеличить количество пунктов меню методом invalidateMenu(), когда пользователь нажимает кнопку «Мне нравится» в элементе RecyclerView, но отображается ошибка.

E/ViewRootImpl: mView does not exist, so discard the remaining points.
java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.pm.ApplicationInfo android.content.Context.getApplicationInfo()' on a null object reference

нажатие кнопки присутствует в OnbindViewHolder() методе адаптера

здесь код базовый класс для панели приложений: -

 public class ActionBarBaseClass extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
    public void updateCount(){
        new ProductDetails().invalidateOptionsMenu();
    }
    @Override
    public  boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.search_wish_cart, menu);
        View cart=(View)menu.findItem(R.id.appbar_cart).getActionView();
        View wish=(View)menu.findItem(R.id.appbar_wish).getActionView();

        ImageView cartImg=cart.findViewById(R.id.img);
        ImageView wishImg=wish.findViewById(R.id.img);

        cartImg.setBackgroundResource(R.drawable.empty_cart);
        wishImg.setBackgroundResource(R.drawable.wish);

        NotificationBadge cartBadge=cart.findViewById(R.id.badge);
        cartBadge.setText("0");
        NotificationBadge wishBadge=wish.findViewById(R.id.badge);
        wishBadge.setText("0");

        SharedPreferences sp=getApplicationContext().getSharedPreferences("like",MODE_PRIVATE);

        int likeNo=sp.getAll().size();
        Log.d("sptag", "onCreateOptionsMenu: null"+likeNo);
        wishBadge.setText(String.valueOf(likeNo));
        return true;

    }


    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        View cart=(View)menu.findItem(R.id.appbar_cart).getActionView();
        View wish=(View)menu.findItem(R.id.appbar_wish).getActionView();

        NotificationBadge cartBadge=cart.findViewById(R.id.badge);
        NotificationBadge wishBadge=wish.findViewById(R.id.badge);

        SharedPreferences sp=getApplicationContext().getSharedPreferences("like",MODE_PRIVATE);
        int likeNo=sp.getAll().size();
        Log.d("sptag", "onCreateOptionsMenu: null"+likeNo);
        wishBadge.setText(String.valueOf(likeNo));
        return super.onPrepareOptionsMenu(menu);
    }
}

Основной класс расширяет базовый класс: -

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_product_details);
    Toolbar toolbar=findViewById(R.id.base_toolbar);
    mainImg=findViewById(R.id.detail_imgTop);
    title=findViewById(R.id.detail_title);
    price=findViewById(R.id.detail_price);
    likeCount=findViewById(R.id.detail_like_count);
    wShare=findViewById(R.id.detail_share);
    fabric=findViewById(R.id.detail_fabric);
    productDiscp=findViewById(R.id.detail_discp_content);

    adapter=new CatelogRecyclerAdapter(ProductDetails.this);
    recyclerView=findViewById(R.id.detail_option);
    GridLayoutManager gridLayoutManager=new GridLayoutManager(ProductDetails.this,2);
    recyclerView.setLayoutManager(gridLayoutManager);


    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    bigList=(List<Product>)getIntent().getSerializableExtra("productList");
    product=(Product)getIntent().getSerializableExtra("current");
    Log.d("listdata", "onDetails: "+bigList.get(2).getCode());


    setData();

}

private void shareIt() {


}



private void setData() {
    List<Product> match=getMatchProduct();
    adapter.setProductList(match);
    recyclerView.setAdapter(adapter);

    Picasso.get().load(product.getDownloadLink()).into(mainImg);
    title.setText(product.getName());
    price.setText("Rs "+product.getPrice());
    fabric.setText("Fabric:-"+product.getFabric());
    productDiscp.setText(product.getDiscp());
    likeCount.setText(product.getLikes()+" Likes");
    mainImg.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i=new Intent(ProductDetails.this, FullScreen.class);
            i.putExtra("link",product.getDownloadLink());
            startActivity(i);
        }
    });
    wShare.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            shareIt();

        }
    });

}

private  List<Product> getMatchProduct() {
    List<Product> smallList=new ArrayList<>();
    for (int i=0;i<bigList.size();i++){
        Log.d("match", "getMatchProductlength: "+i);
        Log.d("match", "getMatchProduct: "+product.getCode());
        if(product.getCode().equals(bigList.get(i).getCode())){
            Log.d("match", "getMatchProduct: found");
            smallList.add(bigList.get(i));
        }
    }
    return smallList;
}

переработчик Адаптер: -

    import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;

public class CatelogRecyclerAdapter extends RecyclerView.Adapter<CatelogRecyclerAdapter.ViewHolder> {
    List<Product> productList;
    Context context;
    int likeCount=0;
    SharedPreferences likes;
    SharedPreferences.Editor editor;
    DatabaseReference firebaseDatabase;
    DatabaseReference likeBox;
    ActionBarBaseClass barBaseClass;

    public CatelogRecyclerAdapter(Context context) {
        this.context=context;
        likes=context.getSharedPreferences("like",Context.MODE_PRIVATE);
        editor=likes.edit();
        firebaseDatabase=FirebaseDatabase.getInstance().getReference();
        barBaseClass=new ActionBarBaseClass();
    }

    public void setProductList(List<Product> productList) {
        this.productList = productList;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.catelog_screen_item, parent, false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        Picasso.get()
                .load(productList.get(position).getDownloadLink())
                .into(holder.img);
        holder.name.setText(productList.get(position).getName());
        holder.price.setText("Rs "+productList.get(position).getPrice());
        holder.likeButton.setLiked(likes.contains(productList.get(position).getDownloadLink()));

        final int pos=position;

         holder.img.setOnClickListener(new View.OnClickListener() {

            int pos=position;
            String dbKey=productList.get(pos).getProdRandomKey();
            String type=productList.get(pos).getType();
            int oldlike=Integer.parseInt(productList.get(pos).getLikes());
            @Override
            public void onClick(View v) {
                Intent i=new Intent(context, ProductDetails.class);
                i.putExtra("current",(Serializable) productList.get(position));
                i.putExtra("productList",(Serializable) productList);
                i.setFlags(FLAG_ACTIVITY_NEW_TASK);
                likeBox=firebaseDatabase.child("products").child(type).child(dbKey);

                HashMap<String,Object> map=new HashMap<>();
                map.put("likes",String.valueOf(oldlike+likeCount));

                likeBox.updateChildren(map)
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                Log.d("like", "onFailureLike: "+e.getMessage());
                            }
                      }).addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                Log.d("like", "onFailureLike: success");
                            }
                      });
                context.startActivity(i);

            }
        });
         holder.likeButton.setOnLikeListener(new OnLikeListener() {
             int pos=position;
             String keyItem=productList.get(pos).getDownloadLink();
             @Override
             public void liked(LikeButton likeButton) {
                 editor.putString(keyItem,"like");
                 editor.commit();
                 barBaseClass.updateCount();
                 likeCount++;
             }

             @Override
             public void unLiked(LikeButton likeButton) {
                if(likes.contains((keyItem))){
                    editor.remove(keyItem);
                    editor.commit();
                    barBaseClass.updateCount();
                 }
             }
         });

    }

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

    class ViewHolder extends RecyclerView.ViewHolder{
        ImageView img;
        TextView name;
        TextView price;
        LikeButton likeButton;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            img=itemView.findViewById(R.id.catelog_img);
            name=itemView.findViewById(R.id.catelog_name);
            price=itemView.findViewById(R.id.catelog_price);
            likeButton=itemView.findViewById(R.id.star_button);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...