繁体   English   中英

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

[英]Fragment Transaction return null in RecyclerView Adapter

我想在方法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 / Process:正在发送信号。 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());

尝试以下类似的方法。

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


}
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM