共享元素转换不起作用 - 我无法解析方法 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());
我正在尝试启动一个 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());