【发布时间】:2017-05-26 21:01:05
【问题描述】:
我试图在我的 RecyclerView.ViewHolder 的 onClick 方法中从其他片段打开一个新片段,我从 firebase 检索我的数据。
但它会抛出下一个错误:
java.lang.NullPointerException:尝试在空对象引用上调用接口方法“void es.laramira.atellez.moroninfo.NewsClickedListener.onClick(android.view.View)” 在 es.laramira.atellez.moroninfo.Models.NewsViewHolder$1.onClick(NewsViewHolder.java:27) 在 android.view.View.performClick(View.java:5610) 在 android.view.View$PerformClick.run(View.java:22265) 在 android.os.Handler.handleCallback(Handler.java:751) 在 android.os.Handler.dispatchMessage(Handler.java:95) 在 android.os.Looper.loop(Looper.java:154) 在 android.app.ActivityThread.main(ActivityThread.java:6077) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
我已经创建了一个界面:
package es.laramira.atellez.moroninfo;
import android.view.View;
public interface NewsClickedListener {
void onClick(View v);
}
这个接口是在一个新的 AppCompatActivity 中实现的:
package es.laramira.atellez.moroninfo;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;import android.support.v7.app.AppCompatActivity;
import android.view.View;
import es.laramira.atellez.moroninfo.Fragments.DetalleFragment;
public class NewsActivity extends AppCompatActivity implements NewsClickedListener {
@Override
public void onClick(View v) {
Bundle args = new Bundle();
DetalleFragment df = new DetalleFragment();
df.setArguments(args);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragment_detalle,df);
ft.setTransition(ft.TRANSIT_FRAGMENT_OPEN);
ft.addToBackStack(null);
ft.commit();
}
}
我在这个类中实例化它,实现它的方法:
package es.laramira.atellez.moroninfo.Models;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import es.laramira.atellez.moroninfo.NewsClickedListener;
import es.laramira.atellez.moroninfo.R;
public class NewsViewHolder extends RecyclerView.ViewHolder{
View mView;
NewsClickedListener newsClickedListener;
public NewsViewHolder(final View itemView) {
super(itemView);
mView = itemView;
itemView.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
newsClickedListener.onClick(view);
}
});
}
//Datos que obtenemos de firebase y los usamos en la cardview, se llaman desde cada categoria
public void setTitular(String titular){
TextView post_titular = (TextView) mView.findViewById(R.id.titleText);
post_titular.setText(titular);
}
public void setImage(Context ctx, String image){
ImageView post_image = (ImageView) mView.findViewById(R.id.imageView);
Picasso.with(ctx).load(image).into(post_image);
}
//Datos para el detalle, lo llama el fragmento de detalle y dependera de cada opcion elegida
public void setTitularDetalle(String titular){
TextView post_titular_detalle = (TextView) mView.findViewById(R.id.txtCabeceraDetalle);
post_titular_detalle.setText(titular);
}
}
【问题讨论】:
-
您需要将您的 Recyclerview 适配器代码添加到帖子中
-
您从未在此处将
newsClickedListener分配给您代码中的任何内容 -
再次,请显示适配器代码。或者您需要将
holder.newsClickedListener分配给实现该接口的任何类
标签: java android firebase nullpointerexception