Android RecyclerView适配器中的片段事务返回null
我想在方法OnClick form RecyclerView.Adapter中启动一个片段,但我遇到了这个问题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
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();
}
}