-1

I'm trying to do click on single item which is gated by Firebase recyclerview adapter by I getting some run time error.

This is my code for ImageViewHolder.class and I'm getting NullPOinter Exception.

This exception is caused on mClickListener so please give me some solution for this problem, I'm not getting proper idea about it.

package com.humbingo.asthanews.Settings;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

import com.humbingo.asthanews.R;
import com.squareup.picasso.Callback;
import com.squareup.picasso.NetworkPolicy;
import com.squareup.picasso.Picasso;


public class ImageViewHolder extends RecyclerView.ViewHolder {

    private static final String TAG = "Firebase";
    private View mView;
    public Button shareBtn;
    public Context context;
    public ImageView imageView;


    private ImageViewHolder.ClickListener mClickListener;


    public ImageViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
        shareBtn = mView.findViewById(R.id.btnShare);

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mClickListener.onItemClick(v, getAdapterPosition());

            }
        });


        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {

                mClickListener.onItemLongClick(v, getAdapterPosition());
                return true;
            }
        });


    }


    public void setTitle(String title) {
        TextView mPostTitle = mView.findViewById(R.id.postTitle);
        Log.d(TAG, "This is Title||-- " + title);
        mPostTitle.setText(title);
    }

    public void setDesc(String desc) {
        TextView mPostDesc = mView.findViewById(R.id.postDesc);
        mPostDesc.setText(desc);
        Log.d(TAG, "This is Description||-- " + desc);
    }


    public void setImage(final Context ctx, final String imageStr) {
        imageView = mView.findViewById(R.id.postImg);
        // Picasso.with(ctx).load(imageStr).into(imageView);

        Picasso.with(ctx).load(imageStr).networkPolicy(NetworkPolicy.OFFLINE).into(imageView, new Callback() {
            @Override
            public void onSuccess() {


            }

            @Override
            public void onError() {
                Log.e(TAG, "setImage: Error Message ");
                Picasso.with(ctx).load(imageStr).into(imageView);


            }
        });


    }


    //Interface to send callbacks...
    public interface ClickListener{
        public void onItemClick(View view, int position);
        public void onItemLongClick(View view, int position);
    }

    public void setOnClickListener(ImageViewHolder.ClickListener clickListener){
        mClickListener = clickListener;
    }


}
Phantômaxx
  • 37,901
  • 21
  • 84
  • 115
Mr. Jay Patel
  • 37
  • 1
  • 5
  • Please include the exact error message and stack trace that you get in your question. Without that, your best option is to use the approach outlined in https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it – Frank van Puffelen Sep 20 '18 at 14:12
  • Make sure you are initializing your callback listener `mClickListener` by calling **ImageViewHolder#setOnClickListener** – Krishna Sharma Sep 20 '18 at 14:34

1 Answers1

0

one simply cannot call interface methods - but has to implement them.

I mean, that interface by itself appears to be useless complexity - because the framework already provides the interfaces one has to implement (which does not mean "adding some more interfaces").

it rather should look about like that ...

itemView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view, int resId) {
        ...
    }
});

itemView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
        ...
        return true;
    }
});
Martin Zeitler
  • 1
  • 19
  • 155
  • 216