我要開始的方法OnClick形式RecyclerView.Adapter一個片段,但片段事務返回NULL我有此煩惱在RecyclerView適配器
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 /?我/過程:發送信號。 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();
}
}
SOLUTION
在我的適配器構造
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());
對不起進行更改,但我不明白,我需要((yourActiviry)) –
它在其中綁定片段一個活動什麼活動。 –
我這樣做 FragmentTransaction transaction =((MenuActivity)context).getSupportFragmentManager()。beginTransaction(); 和我有這個麻煩 java.lang.ClassCastException:com.pedrodelbrete.osbolivia.pedrobrete.DaoAPP不能轉換到com.pedrodelbrete.osbolivia.pedrobrete.MenuActivity 當我投DaoApp,沒有找到方法getSupportFragmentManager() ,感謝您的幫助 –