ColorPicker
ColorPicker copied to clipboard
Application crashing... Fatal Exception: java.lang.IllegalStateException
Version: 1.0.5
Samsung Galaxy J2 (j2y18lte), Android 7.1
Report 1 of 1
java.lang.IllegalStateException: at com.jaredrummler.android.colorpicker.ColorPickerDialog.onColorSelected (ColorPickerDialog.java:583) at com.jaredrummler.android.colorpicker.ColorPickerDialog.access$000 (ColorPickerDialog.java:68) at com.jaredrummler.android.colorpicker.ColorPickerDialog$2.onClick (ColorPickerDialog.java:190) at androidx.appcompat.app.AlertController$ButtonHandler.handleMessage (AlertController.java:167) at android.os.Handler.dispatchMessage (Handler.java:102) at android.os.Looper.loop (Looper.java:154) at android.app.ActivityThread.main (ActivityThread.java:6816) at java.lang.reflect.Method.invoke (Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run (ZygoteInit.java:1565) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1453)
FYI:
Sometimes:
Activity activity = getActivity()
doesn't work correctly.
It can failed when fragment is detached from activity.
Such situations occure very! often (at least in my code for example :-) )
For resolving the issue you can implement next functionality in Your ColorPickerDialog source:
protected ActivityEnabledListener aeListener;
protected void getAvailableActivity(ActivityEnabledListener listener){
if (getActivity() == null){
aeListener = listener;
} else {
listener.onActivityEnabled(getActivity());
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (aeListener != null){
aeListener.onActivityEnabled((FragmentActivity) activity);
aeListener = null;
}
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
if (aeListener != null){
aeListener.onActivityEnabled((FragmentActivity) context);
aeListener = null;
}
}
public interface ActivityEnabledListener {
void onActivityEnabled(FragmentActivity activity);
}
and then replace using getActivity() method with following code:
getAvailableActivity(new ActivityEnabledListener() {
@Override
public void onActivityEnabled(FragmentActivity activity) {
// You can use activity object safely here
}
});