Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.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 共享元素转换不工作-我无法解析方法ActivityOptions Compat.MakeScenetTransitionAnimation(mContext、p1、p2);_Android_Android Activity_Android Recyclerview_Shared Element Transition - Fatal编程技术网

Android 共享元素转换不工作-我无法解析方法ActivityOptions Compat.MakeScenetTransitionAnimation(mContext、p1、p2);

Android 共享元素转换不工作-我无法解析方法ActivityOptions Compat.MakeScenetTransitionAnimation(mContext、p1、p2);,android,android-activity,android-recyclerview,shared-element-transition,Android,Android Activity,Android Recyclerview,Shared Element Transition,我正在尝试从回收器适配器启动共享元素转换活动 以下是片段:- @Override public void onBindViewHolder(final ViewholderPostFeed holder, final int position) { holder.post_header.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {

我正在尝试从回收器适配器启动共享元素转换活动

以下是片段:-

@Override
public void onBindViewHolder(final ViewholderPostFeed holder, final int position) {

  holder.post_header.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (!isLoggedIn())
                showAlertDialog(v);
            else {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    // Call some material design APIs here
                    Intent myIntent = new Intent(MyApplication.getAppContext(), UserProfile.class);
                    myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    myIntent.putExtra("NAME",postFeed.getUser_name());
                    myIntent.putExtra("PIC", postFeed.getUser_pic());
                    myIntent.putExtra("STATUS", postFeed.getUser_status());
                    Pair<View, String> p1 = Pair.create((View)holder.circleImageView, "profile");
                    Pair<View, String> p2 = Pair.create((View)holder.user_name, "user_name");
                    ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(MyApplication.getAppContext(), p1, p2);
                    MyApplication.getAppContext().startActivity(myIntent, options.toBundle());

                } else {
                    // Implement this feature without material design
                    Intent myIntent = new Intent(MyApplication.getAppContext(), UserProfile.class);
                    myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    myIntent.putExtra("NAME",postFeed.getUser_name());
                    myIntent.putExtra("PIC", postFeed.getUser_pic());
                    myIntent.putExtra("STATUS", postFeed.getUser_status());
                    MyApplication.getAppContext().startActivity(myIntent);
                }
            }
        }
    });
请提供帮助。

活动选项Compat.MakeScenetTransition需要活动而不是上下文

此外,由于您使用的是ActivityOptionsCompat,因此不需要检查棒棒糖及以上。它将独立工作。只是在运行kitkat和更低版本的手机上,你看不到任何过渡

编辑: 将活动的引用添加到适配器完全取决于您。您可以使用回调建议或传递活动作为构造函数参数之一

@Override
public void onBindViewHolder(final ViewholderPostFeed holder, final int position) {

 holder.post_header.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        clickCallback.openProfile(postFeed);
    }
 }

public void setCallback(ClickCallback callback) {
    this.clickCallback = callback;
}

public interface ClickCallback {
    void openProfile(PostFeed postFeed);
}
在您的活动中

MyAdapter adapter = new Adapter(/* params */);
adapter.setCallback(new ClickCallback() {
    @Override
    public void openProfile(PostFeed postFeed) {
         // Your code here
    }
});

通过将上下文的转换传递到活动中,可以很容易地完成这一点。 在适配器中获取上下文作为构造函数参数

Context mcontext;
public RecyclerViewAdapter(Context context)
{
    mcontext = context;
}
然后将上下文强制转换为onBindViewHolder中的活动

ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity)mcontext, p1, p2);
mcontext.startActivity(myIntent, options.toBundle());

请编辑您的答案,并进一步添加如何将活动传递给回收器适配器。但是,使用这种方法,我不会获得对row_layout.xml的视图元素的引用。请参见,我有一个带有视图页面的选项卡布局,其中包含片段,现在在这个片段中,我有了一个recycler视图,它进一步包含了带有适配器的row_元素。现在,当我单击row_元素的profile pic时,它应该启动用户活动,并显示正在共享元素转换下的用户的图像和名称。TabLayout->Fragment of view pager->Recycler view->onClick on Post_header->start activity也就是说,我不能使用'Pair p1=Pair.createViewholder.circleImageView,profile;'Pair p2=Pair.createViewholder.user\u name,user\u name;ActivityOptions Compat options=ActivityOptions Compat.MakeScenetTransitionAnimationMyApplication.getAppContext,p1,p2;holder.circularImageView和holder.user_名称未在片段中定义。是的,我刚刚在界面中添加了另一个参数,即MyViewHolderPostFeed holder,然后使用该参数引用图像和文本视图。非常感谢你。
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation((Activity)mcontext, p1, p2);
mcontext.startActivity(myIntent, options.toBundle());