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());