2017-07-19 139 views
0

我要开始的方法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()); 

回答

0

尝试类似下面。

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

+0

对不起进行更改,但我不明白,我需要((yourActiviry)) –

+0

它在其中绑定片段一个活动什么活动。 –

+0

我这样做 FragmentTransaction transaction =((MenuActivity)context).getSupportFragmentManager()。beginTransaction(); 和我有这个麻烦 java.lang.ClassCastException:com.pedrodelbrete.osbolivia.pedrobrete.DaoAPP不能转换到com.pedrodelbrete.osbolivia.pedrobrete.MenuActivity 当我投DaoApp,没有找到方法getSupportFragmentManager() ,感谢您的帮助 –

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


} 
    } 
+0

谢谢,但不工作:C,我有这个异常 致命异常:主要 进程:com.pedrodelbrete.osbolivia .pedrobrete,PID:28161 java.lang.ClassCastException:com.pedrodelbrete.osbolivia.pedrobrete.DaoAPP不能转换为com.pedrodelbrete.osbolivia.pedrobrete.MenuActivity –