Android RecyclerView适配器中的片段事务返回null

Android RecyclerView适配器中的片段事务返回null,android,android-fragments,fragment,fragmenttransaction,Android,Android Fragments,Fragment,Fragmenttransaction,我想在方法OnClick form RecyclerView.Adapter中启动一个片段,但我遇到了这个问题 07-18 23:07:40.318 15794-15794/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.pedrodelbrete.osbolivia.pedrobrete, PID: 15794

我想在方法OnClick form 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信号: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();


}

试试下面的方法

fragment.setArguments(arg);
FragmentTransaction transaction = ((youractivity) context).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.FrameLayoutEncuesta, fragment, "fragment_preguntas");
transaction.commit(); `
在下面进行更改

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


}
    }
公共类适配器提示列表扩展了RecyclerView.Adapter{
ENCUESTASDISPONIBDAO ENCUESTASDISPONIBDAO;
MyItemSelectedListener回调;
名单;
语境;
字符串nombreEncuesta;
长牙;
私人对话;
异步任务;
公共适配器提示列表(上下文,列表){
this.list=列表;
this.context=上下文;
}
@凌驾
public AdapterEncuestList.CustomViewHolder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutFlater.from(parent.getContext()).flate(R.layout.encuesta_项,空);
CustomViewHolder viewHolder=新CustomViewHolder(视图);
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(AdapterEncuestList.CustomViewHolder,int位置){
encuestasDisponiblesDBDao=DaoAPP.getEncuestasDisponiblesDBDao();
list=encuestasDisponiblesDBDao.loadAll();
ENCUESTASDISPONIBLE ENCUESTASDISPONIBLE=list.get(位置);
nombreEncuesta=encuestasDisponibles.getNombre();
idEncuesta=encuestasDisponibles.getId();
holder.itemNombre.setText(nombreEncuesta);
setItemCLickListener(新的ItemCLickListener(){
@凌驾
公共空间单击(视图v,内部位置){
//反义片段(v,pos);
getCallBack().myItemClick(v,pos);
Toast.makeText(上下文,“Clicl en”+pos,Toast.LENGTH_SHORT.show();
}
});
}
@凌驾
public int getItemCount(){
返回值(null!=list?list.size():0);
}
公共接口MyItemSelectedListener{
已选择的无效项(视图v,内部位置);
}
公共MyItemSelectedListener getCallback(){
返回回调;
}
公共void setCallback(MyItemSelectedListener回调){
this.callback=回调;
}
类CustomViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
受保护的TextView itemNombre;
ItemCLickListener ItemCLickListener;
受保护的RelativeLayout ryUserItem;
公共CustomViewHolder(视图){
超级(视图);
//itemnobre=(TextView)view.findViewById(R.id.itemnobre);
itemnobre=(TextView)view.findViewById(R.id.txtNombreEncuesta);
view.setOnClickListener(这个);
pDialog=newprogressdialog(view.getContext());
}
public void setItemCLickListener(ItemCLickListener ItemCLickListener){
this.itemCLickListener=itemCLickListener;
}
//OnClick侦听器
@凌驾
公共void onClick(视图){
itemCLickListener.onItemClick(视图,getAdapterPosition());
}
}
公共类MyFragment扩展了片段{
已创建活动上的公共无效(捆绑包b){
适配器提示列表适配器=新的适配器提示列表(续,列表)
setCallback(新的MyItemSelectedListener(){
@凌驾
选定的公共空项(视图v,内部位置){
不整合碎片(v,位置);
}
});
recycleview.setAdapter(适配器);
}
公共空间碎片(视图v,内部位置){
名单;
encuestasDisponiblesDBDao=DaoAPP.getEncuestasDisponiblesDBDao();
list=encuestasDisponiblesDBDao.loadAll();
EncuestasDisponiblesDB encuestasDisponibles=list.get(pos);
long idEncuesta=encuestasDisponibles.getId();
//菜单上的图标
//setTitle(“Estadisticas”);
Bundle arg=新Bundle();
arg.putLong(“idEncuesta”,idEncuesta);
FragmentTransaction=getActivity().getSupportFragmentManager().beginTransaction();
交易。替换(R.id.FrameLayoutCuesta,片段,“片段前”);
commit();
}
}

抱歉,我不明白((YourActivity))中需要什么活动,它是一个绑定片段的活动。我执行此FragmentTransaction事务=((MenuActivity)上下文)。getSupportFragmentManager().beginTransaction();我遇到了这个问题java.lang.ClassCastException:com.pedrodelbrete.ospolivia.pedrobrete.DaoAPP无法转换为com.pedrodelbrete.ospolivia.pedrobrete.MenuActivity当我转换DaoAPP时,找不到方法getSupportFragmentManager(),感谢您的帮助此处我将适配器设置为myRecycler视图列表EncUsersDisponibleSList=EncUsersDisponibleSBDAO.loadAll();rvAdapter=新适配器提示列表(getActivity().getApplicationContext(),EncUsersDisponibleSList);rcEncuestas.setAdapter(rvAdapter);我的意思是您绑定
适配器的地方是
片段
活动
。谢谢,但不起作用:C,我有这个异常致命的异常:主进程:com.pedrodelbrete.ospolivia.pedrobrete,PID:28161java.lang.ClassCastException:com.pedrodelbrete.ospolivia.pedrobrete.DaoAPP无法强制转换为com.pedrodelbrete.ospolivia.pedrobrete.MenuActivity
 rvAdapter = new AdapterEncuestaList(getActivity().getApplicationContext(),encuestasDisponiblesList,this.getFragmentManager());
fragment.setArguments(arg);
FragmentTransaction transaction = ((youractivity) context).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.FrameLayoutEncuesta, fragment, "fragment_preguntas");
transaction.commit(); `
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();


}
    }