Sau khi thực hiện mới Snackbar
trong một vài ứng dụng của tôi, tôi nhận được lỗi sau:ArrayIndexOutOfBoundsException khi gạt bỏ Snackbar/ViewDragHelper
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1 at
android.support.v4.widget.ViewDragHelper.shouldInterceptTouchEvent(SourceFile:1014) at
android.support.design.widget.SwipeDismissBehavior.onInterceptTouchEvent(SourceFile:188) at
android.support.design.widget.Snackbar$Behavior.onInterceptTouchEvent(SourceFile:659) at
android.support.design.widget.Snackbar$Behavior.onInterceptTouchEvent(SourceFile:641) at
android.support.design.widget.CoordinatorLayout.performIntercept(SourceFile:343) at
android.support.design.widget.CoordinatorLayout.onInterceptTouchEvent(SourceFile:376) at
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1827) at
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at
android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2241) at
android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1946) at
com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1968) at
com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1420) at
android.app.Activity.dispatchTouchEvent(Activity.java:2428) at
android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(SourceFile:59) at
android.support.v7.internal.view.WindowCallbackWrapper.dispatchTouchEvent(SourceFile:59) at
com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1916) at
android.view.View.dispatchPointerEvent(View.java:7475) at
android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3744) at
android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3672) at
android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4924) at
android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4884) at
android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:5036) at
android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:179) at
android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method) at
android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:171) at
android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:5004) at
android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:5058) at
android.view.Choreographer$CallbackRecord.run(Choreographer.java:776) at
android.view.Choreographer.doCallbacks(Choreographer.java:579) at
android.view.Choreographer.doFrame(Choreographer.java:546) at
android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762) at
android.os.Handler.handleCallback(Handler.java:725) at
android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:153) at
android.app.ActivityThread.main(ActivityThread.java:5299) at java.lang.reflect.Method.invokeNative(Native
Method) at java.lang.reflect.Method.invoke(Method.java:511) at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) at
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) at dalvik.system.NativeStart.main(Native
Method)
Tôi đang sử dụng các thiết lập tương tự ở đây: https://github.com/chrisbanes/cheesesquare/blob/master/app/src/main/java/com/support/android/designlibdemo/MainActivity.java
public class MainActivity extends AppCompatActivity {
private Snackbar snackbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// if showing already, close
if (this.snackbar != null) {
this.snackbar.dismiss();
}
// make new snackbar
this.snackbar = Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG).show();
// chris banes example
// Snackbar.make(view, "Here's a Snackbar", Snackbar.LENGTH_LONG).setAction("Action", null).show();
}
});
}
@Override
public void onPause() {
super.onPause();
// dismiss when user clicks "home"
if (this.snackbar != null) {
this.snackbar.dismiss();
}
}
}
Tóm tắt:
-
.210
- Tôi đang sử dụng
Snackbar
- Tôi đang sử dụng
CoodinartorLayout
- Tôi không sử dụng các vấn đề với Google
DrawerLayout
:
- http://code.google.com/p/android/issues/detail?id=175501
- http://code.google.com/p/android/issues/detail?id=103888
Dựa trên dòng android.support.v4.widget.ViewDragHelper.shouldInterceptTouchEvent(SourceFile:1014) at
trong Ngoại lệ, tôi đoán nó có liên quan đến việc "loại bỏ" số Snackbar
?
Có lẽ tôi không nên dismiss
số Snackbar
trong ? Tôi đã từng làm điều này với Toast
s.
"Tôi nhận được lỗi sau" - làm bạn có nghĩa là bạn đã không sao chép này trong phòng thí nghiệm, nhưng bạn đang nhận được nó thông qua báo cáo tai nạn trong sản xuất ứng dụng? "Có lẽ tôi không nên bỏ qua Snackbar trong onPause?" - tốt, không giống như 'Toast', AFAIK là một' Snackbar' là một phần trong hệ thống phân cấp của hoạt động, vì vậy nó không nên can thiệp vào các hoạt động khác tiếp quản nền trước, nếu đó là lý do bạn loại bỏ nó. – CommonsWare
Vâng, chính xác. Tôi không thể tái tạo điều này trên bất kỳ thiết bị nào của tôi hoặc bất kỳ thử nghiệm nào. –
Tại sao điều này lại bị bỏ phiếu? –