Я внедряю dragListener во фрагмент, как показано в коде ниже:
private class ChoiceDragListener implements View.OnDragListener {
@Override
public boolean onDrag(View v, DragEvent event) {
View view = (View) event.getLocalState();
TextView dropTarget = (TextView) v;
if (view == null) {
return false;
}
final TextView dropped = (TextView) view;
switch (event.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
dropped.post(new Runnable() {
@Override
public void run() {
dropped.setAlpha(0);
}
});
//
break;
// MORE CODE FOLLOWS
Реализация работает на моих тестовых устройствах и для подавляющего большинства пользователей.Согласно Google Console, крошечная часть пользователей имела исключение NullPointException в строке dropped.post(new Runnable(){
, которое исчезло после того, как я добавил if (view == null) {return false;}
- причина этого до сих пор остается загадкой.
Дело в том, чтотакое же количество пользователей (буквально меньше 10 из 20 000+) теперь получают ClassCastException на View view = (View) event.getLocalState();
Я озадачен этим, потому что view
может только бытьTextView.Не говоря уже о том, что если это затрагивает лишь незначительную часть пользователей, я подозреваю, что есть что-то еще, возможно, не связанное с моим кодом.
Тем не менее, я хотел бы знать:
- Есть ли в моем коде что-нибудь, что могло бы объяснить, почему (даже в редких случаях) может быть выдано ClassCastException?
- Могу ли я добавить что-нибудь, чтобы помочь этим немногим пользователям?Я немного неохотно использую try / catch, не понимая, что происходит.
Я проверил другие ответы, например Android: classCastException при отображении в держателе Android7.0 и 7.1 getApplication () ClassCastException но они, похоже, не связаны между собой.
Logcat:
Samsung Galaxy S9 (starqltesq), Android 9
java.lang.ClassCastException:
at com.****.***.***.fragmentOne$ChoiceDragListener.onDrag (fragmentOne.java:1101)
at android.view.View.callDragEventHandler (View.java:26053)
at android.view.View.dispatchDragEvent (View.java:26044)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewGroup.notifyChildOfDragStart (ViewGroup.java:1827)
at android.view.ViewGroup.dispatchDragEvent (ViewGroup.java:1674)
at android.view.ViewRootImpl.handleDragEvent (ViewRootImpl.java:7423)
at android.view.ViewRootImpl.access$2100 (ViewRootImpl.java:198)
at android.view.ViewRootImpl$ViewRootHandler.handleMessage (ViewRootImpl.java:4984)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:214)
at android.app.ActivityThread.main (ActivityThread.java:6981)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1445)
Если вам нужны дополнительные сведения или код, я был бы радпредоставить больше контекста.