Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 两个活动之间的共享元素转换问题_Android_Android Intent_Android Activity_Shared Element Transition - Fatal编程技术网

Android 两个活动之间的共享元素转换问题

Android 两个活动之间的共享元素转换问题,android,android-intent,android-activity,shared-element-transition,Android,Android Intent,Android Activity,Shared Element Transition,我在创建基本共享元素转换时遇到问题。从一个活动到下一个活动的转换似乎会出现故障,并重现第一个活动,而不是生成的活动 概述: 我有两个活动:Main活动和Detail活动 MainActivity承载具有CardView布局的RecyclerView。每个cardview位置的onclicklistener将一个对象设置为一个额外的意图,并启动DetailActivity。到目前为止,这一基本实现仍然有效 问题: 现在,我尝试在混合中引入共享元素转换: 原创:(不带过渡动画的作品) 问题方法: p

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

概述:

我有两个活动:Main活动和Detail活动

MainActivity承载具有CardView布局的RecyclerView。每个cardview位置的onclicklistener将一个对象设置为一个额外的意图,并启动DetailActivity。到目前为止,这一基本实现仍然有效

问题:

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

原创:(不带过渡动画的作品)

问题方法:

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());
    }
当我从上面的click方法中取消对animateTransition(v,I)方法的注释时,我得到了一些奇怪的行为:MainActivity在默认情况下会淡出,但随后又回到视图中。DetailActivity仍然从intent加载,但不可见。按下后退按钮似乎什么也不做(仍然可以看到MainActivity),但它会停止DetailActivity

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

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

  • 在我的样式中将my_transition.xml引用为退出转换

    @转换/我的_转换

  • 为两个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"
>

detail\u 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">

请用这个试试

 private void animateTransition(View view, Intent intent){
 String transitionName = mContext.getString(R.string.transition_word);      
        Pair<View, String> pair = Pair.create((View) view, transitionName);

        ActivityOptionsCompat options = ActivityOptionsCompat
                .makeSceneTransitionAnimation(
                        MainActivity.this
                        ,pair
                );
        mContext.startActivity(
                intent
                ,options.toBundle());
    }
private void animateTransfion(视图、意图){
String transitionName=mContext.getString(R.String.transition\u word);
Pair Pair=Pair.create((视图)视图,transitionName);
ActivityOptionsCompat选项=ActivityOptionsCompat
.MakeScenetTransitionAnimation(
主活动,这个
一对
);
mContext.startActivity(
意图
,options.toBundle());
}

问题在于如何在android清单中声明活动backbackback。首先,必须声明父活动和子活动,以便进行正确的反向导航:

<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>

其次,子活动的启动模式必须为“singleTask”。我以前将其设置为“singleInstance”。区别在于后者始终是其任务的唯一成员。如果在此子片段上最小化应用程序,并在以后继续,则“后退”按钮将不会记住父活动


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

轻微修改后会出现相同的问题。我认为指定一对仅用于转换多个视图……在本例中,我只是尝试将MainActivity的cardView转换为DetailActivity。尽管本文是一篇有价值的资源,但我仍然不知道问题出在哪里。我一定错过了什么。。。
<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>