我正在尝试单击由Firebase recyclerview适配器控制的单个项目,因为出现一些运行时错误。
这是我的ImageViewHolder.class代码,并且我收到NullPOinter异常。
此异常是由mClickListener引起的,因此请给我一些解决此问题的方法,我对此没有正确的认识。
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;
}
}
答案 0 :(得分:0)
一个人根本无法调用
interface
方法-但必须实现它们。
我的意思是,该接口本身似乎没有用,因为框架已经提供了必须实现的接口(这并不意味着“添加了更多接口”)。
它应该看起来像那样...
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;
}
});