我想在方法OnClick表单RecyclerView.Adapter中启动一个片段但是我有这个麻烦
07-18 23:07:40.318 15794-15794/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.pedrodelbrete.osbolivia.pedrobrete, PID: 15794
java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.app.FragmentManager android.support.v4.app.FragmentActivity.getSupportFragmentManager()' on a null object reference
at com.pedrodelbrete.osbolivia.pedrobrete.Utils.AdapterEncuestaList.InicioFragment(AdapterEncuestaList.java:147)
at com.pedrodelbrete.osbolivia.pedrobrete.Utils.AdapterEncuestaList$1.onItemClick(AdapterEncuestaList.java:81)
at com.pedrodelbrete.osbolivia.pedrobrete.Utils.AdapterEncuestaList$CustomViewHolder.onClick(AdapterEncuestaList.java:124)
at android.view.View.performClick(View.java:5264)
at android.view.View$PerformClick.run(View.java:21297)
at android.os.Handler.handleCallback(Handler.java:743)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:150)
at android.app.ActivityThread.main(ActivityThread.java:5621)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:684)
07-18 23:07:40.378 15794-15794 /? I /处理:发送信号。 PID:15794 SIG:9
我的RecyclerView.Adapter类
public class AdapterEncuestaList extends RecyclerView.Adapter<AdapterEncuestaList.CustomViewHolder> {
EncuestasDisponiblesDBDao encuestasDisponiblesDBDao;
List<EncuestasDisponiblesDB> list;
Context context;
String nombreEncuesta;
long idEncuesta;
private ProgressDialog pDialog;
AsyncTask<Void, Void, Void> task;
public AdapterEncuestaList(Context context, List<EncuestasDisponiblesDB> list) {
this.list = list;
this.context = context;
}
@Override
public AdapterEncuestaList.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.encuesta_item, null);
CustomViewHolder viewHolder = new CustomViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(AdapterEncuestaList.CustomViewHolder holder, int position) {
encuestasDisponiblesDBDao = DaoAPP.getEncuestasDisponiblesDBDao();
list = encuestasDisponiblesDBDao.loadAll();
EncuestasDisponiblesDB encuestasDisponibles = list.get(position);
nombreEncuesta = encuestasDisponibles.getNombre();
idEncuesta = encuestasDisponibles.getId();
holder.itemNombre.setText(nombreEncuesta);
holder.setItemCLickListener(new ItemCLickListener() {
@Override
public void onItemClick(View v, int pos) {
InicioFragment(v, pos);
Toast.makeText(context, "Clicl en " + pos, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return (null != list ? list.size() : 0);
}
class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected TextView itemNombre;
ItemCLickListener itemCLickListener;
protected RelativeLayout ryUserItem;
public CustomViewHolder(View view) {
super(view);
//itemNombre = (TextView) view.findViewById(R.id.itemNmobre);
itemNombre = (TextView) view.findViewById(R.id.txtNombreEncuesta);
view.setOnClickListener(this);
pDialog = new ProgressDialog(view.getContext());
}
public void setItemCLickListener(ItemCLickListener itemCLickListener) {
this.itemCLickListener = itemCLickListener;
}
//OnClick Listener
@Override
public void onClick(View view) {
itemCLickListener.onItemClick(view, getAdapterPosition());
}
}
public void InicioFragment(View v, int pos) {
List<EncuestasDisponiblesDB> list;
encuestasDisponiblesDBDao = DaoAPP.getEncuestasDisponiblesDBDao();
list = encuestasDisponiblesDBDao.loadAll();
EncuestasDisponiblesDB encuestasDisponibles = list.get(pos);
long idEncuesta = encuestasDisponibles.getId();
//Inicio de menu con Fragment Estadisticas
//setTitle("Estadisticas");
Bundle arg = new Bundle();
arg.putLong("idEncuesta", idEncuesta);
PreguntasFragment fragment = new PreguntasFragment();
fragment.setArguments(arg);
FragmentTransaction transaction = fragment.getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.FrameLayoutEncuesta, fragment, "fragment_preguntas");
transaction.commit();
}
}
解
在我的适配器构造函数
中public AdapterEncuestaList(Context context, List<EncuestasDisponiblesDB> list,FragmentManager manager) {
this.list = list;
this.context = context;
this.manager = manager;
}
我的方法IniciarFragment()
public void InicioFragment(int Pos,Context context){
List<EncuestasDisponiblesDB> list;
encuestasDisponiblesDBDao = DaoAPP.getEncuestasDisponiblesDBDao();
list =encuestasDisponiblesDBDao.loadAll();
EncuestasDisponiblesDB enc = list.get(Pos);
long idEncuesta = enc.getId();
Bundle arg = new Bundle();
arg.putLong("idEncuesta",idEncuesta);
PreguntasFragment fragment = new PreguntasFragment();
fragment.setArguments(arg);
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.FrameLayout, fragment, "fragment_edisponibles");
transaction.commit();
}
当我调用AdapterClass时,我的片段
rvAdapter = new AdapterEncuestaList(getActivity().getApplicationContext(),encuestasDisponiblesList,this.getFragmentManager());
答案 0 :(得分:0)
尝试以下内容。
fragment.setArguments(arg);
FragmentTransaction transaction = ((youractivity) context).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.FrameLayoutEncuesta, fragment, "fragment_preguntas");
transaction.commit(); `
答案 1 :(得分:0)
进行以下更改
public class AdapterEncuestaList extends RecyclerView.Adapter<AdapterEncuestaList.CustomViewHolder> {
EncuestasDisponiblesDBDao encuestasDisponiblesDBDao;
MyItemSelectedListener callback;
List<EncuestasDisponiblesDB> list;
Context context;
String nombreEncuesta;
long idEncuesta;
private ProgressDialog pDialog;
AsyncTask<Void, Void, Void> task;
public AdapterEncuestaList(Context context, List<EncuestasDisponiblesDB> list) {
this.list = list;
this.context = context;
}
@Override
public AdapterEncuestaList.CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.encuesta_item, null);
CustomViewHolder viewHolder = new CustomViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(AdapterEncuestaList.CustomViewHolder holder, int position) {
encuestasDisponiblesDBDao = DaoAPP.getEncuestasDisponiblesDBDao();
list = encuestasDisponiblesDBDao.loadAll();
EncuestasDisponiblesDB encuestasDisponibles = list.get(position);
nombreEncuesta = encuestasDisponibles.getNombre();
idEncuesta = encuestasDisponibles.getId();
holder.itemNombre.setText(nombreEncuesta);
holder.setItemCLickListener(new ItemCLickListener() {
@Override
public void onItemClick(View v, int pos) {
//InicioFragment(v, pos);
getCallBack().myItemClick(v,pos);
Toast.makeText(context, "Clicl en " + pos, Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return (null != list ? list.size() : 0);
}
public interface MyItemSelectedListener{
void onMyItemSelected(View v ,int position);
}
public MyItemSelectedListener getCallback() {
return callback;
}
public void setCallback(MyItemSelectedListener callback) {
this.callback = callback;
}
class CustomViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
protected TextView itemNombre;
ItemCLickListener itemCLickListener;
protected RelativeLayout ryUserItem;
public CustomViewHolder(View view) {
super(view);
//itemNombre = (TextView) view.findViewById(R.id.itemNmobre);
itemNombre = (TextView) view.findViewById(R.id.txtNombreEncuesta);
view.setOnClickListener(this);
pDialog = new ProgressDialog(view.getContext());
}
public void setItemCLickListener(ItemCLickListener itemCLickListener) {
this.itemCLickListener = itemCLickListener;
}
//OnClick Listener
@Override
public void onClick(View view) {
itemCLickListener.onItemClick(view, getAdapterPosition());
}
}
public class MyFragment extends Fragments{
public void onActivityCreated(Bundle b){
AdapterEncuestaList adapter=new AdapterEncuestaList (contaxt,list)
adapter.setCallback(new MyItemSelectedListener() {
@Override
public void onMyItemSelected(View v, int position) {
InicioFragment(v,position);
}
});
recycleview.setAdapter(adapter);
}
public void InicioFragment(View v, int pos) {
List<EncuestasDisponiblesDB> list;
encuestasDisponiblesDBDao = DaoAPP.getEncuestasDisponiblesDBDao();
list = encuestasDisponiblesDBDao.loadAll();
EncuestasDisponiblesDB encuestasDisponibles = list.get(pos);
long idEncuesta = encuestasDisponibles.getId();
//Inicio de menu con Fragment Estadisticas
//setTitle("Estadisticas");
Bundle arg = new Bundle();
arg.putLong("idEncuesta", idEncuesta);
FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.FrameLayoutEncuesta, fragment, "fragment_preguntas");
transaction.commit();
}
}