2017-07-19 11 views
0

Je veux commencer un fragment de méthode OnClick forme RecyclerView.Adapter mais j'ai ce troubleFragment Transaction return null dans RecyclerView Adaptateur

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/Process: Signal d'envoi. PID: 15794 SIG: 9

ma RecyclerView.Adapter Classe

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

dans mon Constructor Adaptateur

public AdapterEncuestaList(Context context, List<EncuestasDisponiblesDB> list,FragmentManager manager) { 
    this.list = list; 
    this.context = context; 
    this.manager = manager; 



} 

ma méthode 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(); 

} 

mon fragment quand je l'appelle le AdapterClass

rvAdapter = new AdapterEncuestaList(getActivity().getApplicationContext(),encuestasDisponiblesList,this.getFragmentManager()); 

Répondre

0

Essayez quelque chose comme ci-dessous.

fragment.setArguments(arg); FragmentTransaction transaction = ((youractivity) context).getSupportFragmentManager().beginTransaction(); transaction.replace(R.id.FrameLayoutEncuesta, fragment, "fragment_preguntas"); transaction.commit();

+0

Désolé, mais je ne comprenais pas ce que je besoin d'activité ((yourActiviry)) –

+0

Son une activité dans laquelle vous liez des fragments. –

+0

Je fais ceci FragmentTransaction transaction = ((MenuActivity) context) .getSupportFragmentManager(). BeginTransaction(); et j'ai ce trouble java.lang.ClassCastException: com.pedrodelbrete.osbolivia.pedrobrete.DaoAPP ne peut pas être jeté à com.pedrodelbrete.osbolivia.pedrobrete.MenuActivity quand je jetai DaoApp, ne trouvent pas la méthode getSupportFragmentManager() , merci pour votre aide –

0

Apporter des modifications ci-dessous

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(); 


} 
    } 
+0

Merci, mais ne fonctionne pas: C, j'ai cette exception FATAL EXCEPTION: principal Processus: com.pedrodelbrete.osbolivia .pedrobrete, PID: 28161 java.lang.ClassCastException: com.pedrodelbrete.osbolivia.pedrobrete.DaoAPP ne peut pas être casté en com.pedrodelbrete.osbolivia.pedrobrete.MenuActivity –