Android 图像视图拖动';n';drop 7.1.1错误
我有两个Android 图像视图拖动';n';drop 7.1.1错误,android,android-layout,drag-and-drop,Android,Android Layout,Drag And Drop,我有两个ViewGroups,它们只包含ImageViews。一个ViewGroup(RecyclerView)类似于工具箱。另一个是工作区(RelativeLayout)。我需要从工具箱中拖动一个ImageView,然后将其放到工作区 我试图将整个ImageView从一个父视图移动到另一个父视图 case DragEvent.ACTION_DROP: View view = (View) event.getLocalState(); ViewGroup owner = (ViewGroup)
ViewGroup
s,它们只包含ImageView
s。一个ViewGroup
(RecyclerView
)类似于工具箱。另一个是工作区(RelativeLayout
)。我需要从工具箱中拖动一个ImageView
,然后将其放到工作区
我试图将整个ImageView从一个父视图移动到另一个父视图
case DragEvent.ACTION_DROP:
View view = (View) event.getLocalState();
ViewGroup owner = (ViewGroup) view.getParent();
owner.removeView(view);
RelativeLayout container = (RelativeLayout) layoutview;
container.addView(view);
view.setVisibility(View.VISIBLE);
break;
这在2月份更新的7.1.1以下的Android上运行良好。但在2月7.1日,我有一个例外:
ClassCastException:android.widget.RelativeLayout$LayoutParams
无法强制转换为android.support.v7.widget.RecyclerView$LayoutParams
它出现在view.setVisibility()
中。在调试器中,我可以看到,拖放后,ImageView
在父级中具有RelativeLayout
,在LayoutParams中具有RelativeLayout.LayoutParams
。但是当视图调用其setVisibility
时,就会运行RecycleView
布局
为什么此异常仅在2月7.1.1更新时引发?我该怎么办?也许我应该只移动数据而不是整个视图?但是我必须在工作区创建一个新的ImageView
UPD:Logcat:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.alexander.example, PID: 20588
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.support.v7.widget.RecyclerView$LayoutParams
at android.support.v7.widget.RecyclerView.getChildViewHolderInt(RecyclerView.java:4226)
at android.support.v7.widget.RecyclerView$LayoutManager.onInitializeAccessibilityNodeInfoForItem(RecyclerView.java:9406)
at android.support.v7.widget.RecyclerViewAccessibilityDelegate$1.onInitializeAccessibilityNodeInfo(RecyclerViewAccessibilityDelegate.java:90)
at android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl$1.onInitializeAccessibilityNodeInfo(AccessibilityDelegateCompat.java:246)
at android.support.v4.view.AccessibilityDelegateCompatJellyBean$1.onInitializeAccessibilityNodeInfo(AccessibilityDelegateCompatJellyBean.java:66)
at android.view.View.onInitializeAccessibilityNodeInfo(View.java:6607)
at android.view.View.createAccessibilityNodeInfoInternal(View.java:6568)
at android.view.View$AccessibilityDelegate.createAccessibilityNodeInfo(View.java:23638)
at android.view.View.createAccessibilityNodeInfo(View.java:6551)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:145)
at android.view.accessibility.AccessibilityRecord.setSource(AccessibilityRecord.java:119)
at android.view.View.onInitializeAccessibilityEventInternal(View.java:6505)
at android.view.View$AccessibilityDelegate.onInitializeAccessibilityEvent(View.java:23550)
at android.support.v4.view.AccessibilityDelegateCompatIcs.onInitializeAccessibilityEvent(AccessibilityDelegateCompatIcs.java:97)
at android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateIcsImpl.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:192)
at android.support.v4.view.AccessibilityDelegateCompat.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:432)
at android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl$1.onInitializeAccessibilityEvent(AccessibilityDelegateCompat.java:241)
at android.support.v4.view.AccessibilityDelegateCompatJellyBean$1.onInitializeAccessibilityEvent(AccessibilityDelegateCompatJellyBean.java:61)
at android.view.View.onInitializeAccessibilityEvent(View.java:6491)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:6358)
at android.view.View$AccessibilityDelegate.sendAccessibilityEventUnchecked(View.java:23489)
at android.support.v4.view.AccessibilityDelegateCompatIcs.sendAccessibilityEventUnchecked(AccessibilityDelegateCompatIcs.java:122)
at android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateIcsImpl.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:223)
at android.support.v4.view.AccessibilityDelegateCompat.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:371)
at android.support.v4.view.AccessibilityDelegateCompat$AccessibilityDelegateJellyBeanImpl$1.sendAccessibilityEventUnchecked(AccessibilityDelegateCompat.java:268)
at android.support.v4.view.AccessibilityDelegateCompatJellyBean$1.sendAccessibilityEventUnchecked(AccessibilityDelegateCompatJellyBean.java:87)
at android.view.View.sendAccessibilityEventUnchecked(View.java:6341)
at android.view.View$SendViewStateChangedAccessibilityEvent.run(View.java:23675)
at android.view.View$SendViewStateChangedAccessibilityEvent.runOrPost(View.java:23708)
at android.view.View.notifyViewAccessibilityStateChangedIfNeeded(View.java:9475)
at android.view.View.setFlags(View.java:11591)
at android.view.View.setVisibility(View.java:8069)
at android.widget.ImageView.setVisibility(ImageView.java:1551)
at com.alexander.example.CustomRelativeLayout.onDragEvent(CustomRelativeLayout.java:353)
at android.view.View.callDragEventHandler(View.java:20901)
at android.view.View.dispatchDragEvent(View.java:20889)
at android.view.ViewGroup.dispatchDragEvent(ViewGroup.java:1441)
at com.alexander.example.CustomRelativeLayout.dispatchDragEvent(CustomRelativeLayout.java:275)
尝试添加新的LayoutParams
ImageView
以从RecyclerView
中删除并添加到RelativeLayout
,因此此视图已具有RelativeLayout.LayoutParams
(我已在调试器中对其进行了检查)。无论如何,我尝试设置新的RelativeLayout.LayoutParams
,但没有任何效果。我甚至尝试设置newRecyclerView.LayoutParams
,然后我将强制转换异常RecyclerView$LayoutParams
设置为RelativeLayout$LayoutParams
。这看起来像Android SDK中的一个bug。如果你已经安装了安卓msources,你可以在安卓代码中设置断点,看看哪里出了问题,如果layoutparams真的错了,我试着理解源代码。我只理解View.onInitializeAccessibilityNodeInfo
调用AccessibilityDelegateCompat$AccessibilityDelegateKeyImpl$1.onInitializeAccessibilityNodeInfo
调用RecycleServiceAccessibilityDelegate$1.onInitializeAccessibilityNodeInfo
。(它是否应该调用JellyBean委托???)而ImageView
的父级和LayoutParams
始终属于RelativeLayout
。请参阅使用stacktrace更新的帖子。尝试使用新的LayoutParamsImageView
将其从RecyclerView
中删除并添加到RelativeLayout
,添加它,因此此视图已具有RelativeLayout.LayoutParams
(我已在调试器中对其进行了检查)。无论如何,我尝试设置新的RelativeLayout.LayoutParams
,但没有任何效果。我甚至尝试设置newRecyclerView.LayoutParams
,然后我将强制转换异常RecyclerView$LayoutParams
设置为RelativeLayout$LayoutParams
。这看起来像Android SDK中的一个bug。如果你已经安装了安卓msources,你可以在安卓代码中设置断点,看看哪里出了问题,如果layoutparams真的错了,我试着理解源代码。我只理解View.onInitializeAccessibilityNodeInfo
调用AccessibilityDelegateCompat$AccessibilityDelegateKeyImpl$1.onInitializeAccessibilityNodeInfo
调用RecycleServiceAccessibilityDelegate$1.onInitializeAccessibilityNodeInfo
。(它是否应该调用JellyBean委托???)而ImageView
的父级和LayoutParams
始终属于RelativeLayout
。请参阅stacktrace更新的帖子。