Android 在重新进入第一个活动之前更新共享元素
我在两个活动之间有一个共享元素,它工作正常,Android 在重新进入第一个活动之前更新共享元素,android,android-recyclerview,shared-element-transition,Android,Android Recyclerview,Shared Element Transition,我在两个活动之间有一个共享元素,它工作正常,Activitya是主元素(包含RecyclerView),而ActivityB是细节元素。有时我需要在详细模式下更改数据,我想在重新进入转换之前将此更改应用于活动A,但在更改并通知适配器后,当我按下back应用程序崩溃时,我使用LocalBroadcastManager来反映更改,这是崩溃日志: java.lang.NullPointerException: Attempt to invoke virtual method 'void android
Activity
a是主元素(包含RecyclerView
),而Activity
B是细节元素。有时我需要在详细模式下更改数据,我想在重新进入转换之前将此更改应用于活动
A,但在更改并通知适配器
后,当我按下back应用程序崩溃时,我使用LocalBroadcastManager
来反映更改,这是崩溃日志:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.view.ViewGroup.transformMatrixToGlobal(android.graphics.Matrix)' on a null object reference
at android.view.GhostView.calculateMatrix(GhostView.java:95)
at android.app.ActivityTransitionCoordinator$GhostViewListeners.onPreDraw(ActivityTransitionCoordinator.java:951)
at android.view.ViewTreeObserver.dispatchOnPreDraw(ViewTreeObserver.java:944)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2435)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1343)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6853)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:825)
at android.view.Choreographer.doCallbacks(Choreographer.java:619)
at android.view.Choreographer.doFrame(Choreographer.java:579)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:811)
at android.os.Handler.handleCallback(Handler.java:815)
at android.os.Handler.dispatchMessage(Handler.java:104)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6102)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
活动A(我在其中更新我的UI):
@Override
public void onReceive(Context context, Intent intent) {
int index = intent.getIntExtra(Constants.EXTRA_ORDER_INDEX, -1);
if (index != -1) {
Order order = intent.getParcelableExtra(Constants.EXTRA_ORDER);
if (order != null) {
OrderItem orderItem =
(OrderItem) mItemsAdapter.getAdapterItems().get(index);
orderItem.setOrder(order);
mItemsAdapter.notifyItemChanged(index);
}
}
}
我尝试过但没有成功的地方:1.我在
RecyclerView
2.在恢复时通知我的适配器,但在转换后应用了更改。
3.调用了
setLayoutFrozed
,结果与#2相同
注意:我需要在重新进入转换前应用更改,我不想在转换后更新UI。这是正确的方法吗?知道我遗漏了什么吗?
如果你需要更多的细节来帮助我,请让我知道,谢谢