gpt4 book ai didi

android - 两个 Activity 之间的共享元素转换问题

转载 作者:太空宇宙 更新时间:2023-11-03 13:53:17 25 4
gpt4 key购买 nike

我在创建基本共享元素转换时遇到问题。从一个 Activity 到下一个 Activity 的过渡似乎会出现故障并重现第一个 Activity ,而不是产生的 Activity 。

概述:

我有两个 Activity :MainActivity 和 DetailActivity。

MainActivity 托管一个带有 CardView 布局的 RecyclerView。每个 cardview 位置的 onclicklistener 将对象设置为 intent extra,并启动 DetailActivity。这个基本实现到目前为止有效。

问题:

现在我正尝试在混合中引入共享元素转换:

原文:(没有过渡动画的作品)

public void onObjectClick(View v, int position) {
Word detailWord = mRepository.getWord(position);
Intent i = new Intent(mContext, DetailActivity.class);
i.putExtra(WORD_OBJECT, detailWord);
//animateTransition(v,i); -doesn't work
mContext.startActivity(i);

问题方法:

private void animateTransition(View view, Intent intent){
String transitionName = mContext.getString(R.string.transition_word);
ActivityOptionsCompat options = ActivityOptionsCompat
.makeSceneTransitionAnimation(
baseView.getActivity()
,view
,transitionName
);
mContext.startActivity(
intent
,options.toBundle());
}

当我从上面的点击方法中取消对 animateTransition(v,i) 方法的注释时,我得到了一些奇怪的行为:默认情况下 MainActivity 淡出,但随后又回到 View 中。 DetailActivity 仍然从 Intent 中加载但不可见。按下后退按钮似乎什么也没做(仍然看到 MainActivity),但它停止了 DetailActivity。

到目前为止,我已经完成了以下操作来连接所有这些:

  • 在我的 styles.xml 中启用窗口内容转换

  • 以我的风格引用 my_transition.xml 作为退出过渡

    @transition/my_transition

  • 为两个 cardView 中的共享元素提供了 android:transitionName(由在 activity_home.xml RelativeLayout 中引用的 RecyclerView 使用)

Card_view_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="4dp"
android:onClick="animateIntent"
android:clickable="true"
android:transitionName="@string/transition_word"
>

详细 Activity .xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".DetailActivity"
android:transitionName="@string/transition_word">

最佳答案

问题是 Activity 后台堆栈是如何在 android list 中声明的​​。首先,必须声明父子 Activity 以进行正确的反向导航:

<activity
android:name=".ui.activity.HomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.activity.DetailActivity"
android:launchMode="singleTask"
android:parentActivityName=".ui.activity.HomeActivity"
android:label="@string/app_name">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="ui.activity.HomeActivity"/>
</activity>

其次,子 Activity 必须具有"singleTask" 启动模式。我之前将其设置为“singleInstance”。不同之处在于后者始终是其任务的唯一成员。如果您在此子 fragment 上最小化您的应用程序并稍后恢复它,后退按钮将不会记住您的父 Activity 。

父 Activity 导航和 sceneTransitionAnimation 都使用 singleTask launchMode 属性。

关于android - 两个 Activity 之间的共享元素转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32650545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com