使用 Transition Manager 的文本淡入不适用于 RecyclerView
Text fade-in with Transition Manager not working with RecyclerView
我有一个包含 recyclerview 的片段,当我点击一个项目时,我希望其中的文本视图淡出,以便场景过渡到 Activity。当我点击后退按钮返回片段时,recyclerview 项目中的文本应该淡入。问题是这只适用于 recyclerview 中的第一个项目。对于任何其他项目,当我移回片段时,文本会淡出但保持不可见。
在 Adapter 的 onBindViewHolder 中调用 toggleVisibility 方法:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String imageTransitionName = context.getString(R.string.timeline_item_transition_image);
Pair imagePair = new Pair<>(view.findViewById(R.id.timeline_image_framelayout), imageTransitionName);
ActivityOptionsCompat optionsCompat =
ActivityOptionsCompat.makeSceneTransitionAnimation(mUpcomingEventsFragment.getActivity(),
imagePair);
toggleVisibility(holder.itemView, false);
view.getContext().startActivity(EventDetailActivity.newIntent(context,
(Event) mTimelineItemList.get(holder.getAdapterPosition())), optionsCompat.toBundle());
}
});
以及 TransitionManager 淡入淡出的方法:
public void toggleVisibility(View view, boolean visible) {
TransitionManager.beginDelayedTransition((ViewGroup) view, new Fade());
TextView timeText = (TextView) view.findViewById(R.id.event_time);
TextView titleText = (TextView) view.findViewById(R.id.event_title);
timeText.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
titleText.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
我在片段恢复时调用 toggleVisibility
方法,mUpcomingEventsAdapter.toggleVisibility(mRecyclerView, true);
但我的问题是我不确定如何在 recyclerview 中正确设置所选项目的可见性我回到片段。
Recycler View 包含多个视图,它们的文本视图都具有相同的 ID(Recycler 视图在每个项目上重复使用该视图)。这就是为什么当您尝试更改它时,它只会更改一个视图的可见性。
你可以这样做:
向您的适配器添加一个 toggleAllVisibilities 方法:
public void toggleAllVisibilities(boolean visible) {
this.visible = visible;
this.notifyDataSetChanged();
}
notifyDatasetChanged() 方法告诉 recyclerview-Adapter,包含的数据已更改,它应该为每个项目调用 onBindViewHolder。
visible 应该是您适配器中的全局变量。
现在您可以使用原始的 toggleVisibility 方法在 onBindViewholder 中设置每个项目的可见性。
toggleVisibility(holder.itemView, 可见);
我有一个包含 recyclerview 的片段,当我点击一个项目时,我希望其中的文本视图淡出,以便场景过渡到 Activity。当我点击后退按钮返回片段时,recyclerview 项目中的文本应该淡入。问题是这只适用于 recyclerview 中的第一个项目。对于任何其他项目,当我移回片段时,文本会淡出但保持不可见。
在 Adapter 的 onBindViewHolder 中调用 toggleVisibility 方法:
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String imageTransitionName = context.getString(R.string.timeline_item_transition_image);
Pair imagePair = new Pair<>(view.findViewById(R.id.timeline_image_framelayout), imageTransitionName);
ActivityOptionsCompat optionsCompat =
ActivityOptionsCompat.makeSceneTransitionAnimation(mUpcomingEventsFragment.getActivity(),
imagePair);
toggleVisibility(holder.itemView, false);
view.getContext().startActivity(EventDetailActivity.newIntent(context,
(Event) mTimelineItemList.get(holder.getAdapterPosition())), optionsCompat.toBundle());
}
});
以及 TransitionManager 淡入淡出的方法:
public void toggleVisibility(View view, boolean visible) {
TransitionManager.beginDelayedTransition((ViewGroup) view, new Fade());
TextView timeText = (TextView) view.findViewById(R.id.event_time);
TextView titleText = (TextView) view.findViewById(R.id.event_title);
timeText.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
titleText.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
}
我在片段恢复时调用 toggleVisibility
方法,mUpcomingEventsAdapter.toggleVisibility(mRecyclerView, true);
但我的问题是我不确定如何在 recyclerview 中正确设置所选项目的可见性我回到片段。
Recycler View 包含多个视图,它们的文本视图都具有相同的 ID(Recycler 视图在每个项目上重复使用该视图)。这就是为什么当您尝试更改它时,它只会更改一个视图的可见性。
你可以这样做:
向您的适配器添加一个 toggleAllVisibilities 方法:
public void toggleAllVisibilities(boolean visible) {
this.visible = visible;
this.notifyDataSetChanged();
}
notifyDatasetChanged() 方法告诉 recyclerview-Adapter,包含的数据已更改,它应该为每个项目调用 onBindViewHolder。 visible 应该是您适配器中的全局变量。
现在您可以使用原始的 toggleVisibility 方法在 onBindViewholder 中设置每个项目的可见性。 toggleVisibility(holder.itemView, 可见);