共享元素转换不起作用 - 我无法解析方法 ActivityOptionsCompat.makeSceneTransitionAnimation(mContext, p1, p2);

Shared element transition not working- I can't resolve method ActivityOptionsCompat.makeSceneTransitionAnimation(mContext, p1, p2);

我正在尝试启动一个 activity 与来自回收器适配器的共享元素转换。

这是片段:-

@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);
                }
            }
        }
    });

Error:Can't resolve method ActivityOptionsCompat.makeSceneTransition(...Context,...View,...String);

我已经在 row_layout 和 user_activity.xml 中给出了转换名称:

tansitionName="profile"
tansitionName="user_name"

请帮忙。

ActivityOptionsCompat.makeSceneTransition 需要 Activity 而不是 Context

此外,由于您使用的是 ActivityOptionsCompat,因此无需检查 lollipop 及以上版本。它会自行工作。只是您不会在 运行 kitkat 及以下手机中看到任何转换。

编辑:

将 Activity 的引用添加到适配器完全取决于您。您可以使用回调(推荐)或将 Activity 作为构造函数参数之一传递。

@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);
}

在你的Activity,

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

这可以很容易地通过将上下文转换为 activity 来完成。 获取上下文作为适配器中的构造函数参数。

Context mcontext;
public RecyclerViewAdapter(Context context)
{
    mcontext = context;
}

然后在onBindViewHolder中将上下文投射到activity。

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