我有一个带有片段的导航抽屉及其使用androidx编译的活动,其中一个我想调用一个包含自定义caldroid的片段,直到现在它工作正常,但目前完成片段或更改为另一个片段logcat 调用此错误:
我在互联网上搜索并发现了一个类似的案例,https: //issuetracker.google.com/issues/135764330,它仅与使用 androidx 的项目有关,但我不知道如何将库中的更改应用于消除这个错误。
错误日志:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: edu.usil.staffmovil, PID: 29749
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean androidx.fragment.app.FragmentManagerImpl.isDestroyed()' on a null object reference
at androidx.fragment.app.Fragment.performDetach(Fragment.java:2849)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1034)
at androidx.fragment.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManagerImpl.java:1238)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1303)
at androidx.fragment.app.FragmentManagerImpl.dispatchStateChange(FragmentManagerImpl.java:2659)
at androidx.fragment.app.FragmentManagerImpl.dispatchDestroy(FragmentManagerImpl.java:2644)
at androidx.fragment.app.Fragment.performDestroy(Fragment.java:2825)
at androidx.fragment.app.FragmentManagerImpl.moveToState(FragmentManagerImpl.java:1028)
at androidx.fragment.app.FragmentManagerImpl$3$1.run(FragmentManagerImpl.java:1099)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5443)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
片段中的代码:
public class EventHomeFragment extends Fragment {
public static final String TAG = "EventHomeFragment";
private int diaSemana=0, diaMes=0, mes=0, anio=0, diaSelect=0;
private CaldroidFragment caldroid;
private int altoContenido=0, altoFila=0, posicionScroll=0, altoMesAnio = 0, altoSemana = 0, mesVisible = 0, anioVisible = 0;
private Calendar fechaSelect;
//More Definitions
//...
//...
public EventHomeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.savedInstanceState = savedInstanceState;
fechaSelect = Calendar.getInstance();
Calendar cal = Calendar.getInstance();
diaSemana = cal.get(Calendar.DAY_OF_WEEK);
diaMes = cal.get(Calendar.DAY_OF_MONTH);
mes = cal.get(Calendar.MONTH);
anio = cal.get(Calendar.YEAR);
mesVisible = mes;
anioVisible = anio;
setViewsComponentsAndEvents();
fechaSelect.setTime(FechaUtils.getDateFromStringYYYYMMMDD( anio + "-" + ((mes + 1) < 10 ? ("0" + mes) : mes) + "-" + diaMes));
}
private void setViewsComponentsAndEvents() {
setDatosSemanaCabecera();
setListarEventosPantalla();
setCustomCaldroid();
manejador_sliding.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!expand) {
expand();
} else {
collapse();
}
}
});
lista_eventos.post(new Runnable() {
@Override
public void run() {
//Log.e("post","entramos");
configurarViewsEventos();
}
});
}
private void setCustomCaldroid() {
CaldroidListener listener = new CaldroidListener() {
@Override
public void onSelectDate(Date date, View view) {
long currTime = System.currentTimeMillis();
if(timeLastClick!=0){
if(currTime - timeLastClick < ViewConfiguration.getDoubleTapTimeout()){
return;
}
}else{
timeLastClick = currTime;
}
Calendar fecha = Calendar.getInstance();
fecha.setTime(date);
setFechaSelectedFromCalendar(fecha.get(Calendar.DAY_OF_WEEK), fecha.get(Calendar.DAY_OF_MONTH), fecha.get(Calendar.MONTH), fecha.get(Calendar.YEAR));
if(lastSelected!=null){
Calendar lastSelectedFecha = Calendar.getInstance();
lastSelectedFecha.setTime(lastSelected);
if(fecha.get(Calendar.DAY_OF_MONTH)==lastSelectedFecha.get(Calendar.DAY_OF_MONTH) &&
fecha.get(Calendar.MONTH)==lastSelectedFecha.get(Calendar.MONTH) &&
fecha.get(Calendar.YEAR)==lastSelectedFecha.get(Calendar.YEAR)){
mismaFecha=true;
}else{
mismaFecha=false;
}
caldroid.clearBackgroundDrawableForDate(lastSelected);
}else{
mismaFecha = true;
}
//si el mes que se muestra es mayor que el mes de la fecha seleccionada
//entonces se ha seleccionado la una fecha del mes anterior
//se esta en la primera fila
if(anio==anioVisible) {
if (mesVisible > mes) {
posicionScroll = 0;
}
if (mesVisible < mes) {
Calendar fechaPrimero = Calendar.getInstance();
fechaPrimero.set(anioVisible, mesVisible, 1);
fechaPrimero.setMinimalDaysInFirstWeek(1);
int semanaMes = fechaPrimero.getActualMaximum(Calendar.WEEK_OF_MONTH);
posicionScroll = altoFila * (semanaMes - 1);
}
if(mesVisible==mes){
int semanaMes = fechaSelect.get(Calendar.WEEK_OF_MONTH);
posicionScroll = 0;
if(semanaMes>1){
posicionScroll = altoFila*(semanaMes-1);
}
}
}
if(anioVisible>anio){
posicionScroll = 0;
}
if(anioVisible<anio){
Calendar fechaPrimero = Calendar.getInstance();
fechaPrimero.set(anioVisible, mesVisible, 1);
fechaPrimero.setMinimalDaysInFirstWeek(1);
int semanaMes = fechaPrimero.getActualMaximum(Calendar.WEEK_OF_MONTH);
posicionScroll = altoFila * (semanaMes - 1);
}
lastSelected = date;
// caldroid.setBackgroundResourceForDate(R.color.color_evento_selected, lastSelected);
caldroid.refreshView();
moveScrollToDateSelected();
if(expand && !mostrarMensaje && moveScrollToDateSelected()){
collapse();
}
}
};
caldroid = new CaldroidFragment();
Bundle args = new Bundle();
Calendar fecha = Calendar.getInstance();
fecha.setTime(FechaUtils.getDateFromStringYYYYMMMDD(anio + "-" + (mes + 1) + "-" + diaMes));
args.putInt(CaldroidFragment.MONTH, fecha.get(Calendar.MONTH) + 1);
args.putInt(CaldroidFragment.YEAR, fecha.get(Calendar.YEAR));
args.putInt(CaldroidFragment.THEME_RESOURCE, R.style.CaldroidEventosUsil);
args.putInt(CaldroidFragment.START_DAY_OF_WEEK, CaldroidFragment.MONDAY);
args.putBoolean(CaldroidFragment.SIX_WEEKS_IN_CALENDAR, false);
caldroid.setBackgroundDrawableForDate(getResources().getDrawable(R.color.color_evento_selected), fechaSelect.getTime());
caldroid.setArguments(args);
trans = getChildFragmentManager().beginTransaction();
trans.addToBackStack(null);
trans.replace(R.id.fragment_custom_caldroid, caldroid);
// trans.remove();
trans.commit();
}
}