我在我的聊天项目中使用 StoryView。关联- StoryView Github
由于需要一个回收者视图来展示故事,所以我还制作了一个适配器。 Storyview展示的片段代码-
public class StatusFragment extends Fragment {
FragmentStatusBinding binding;
FirebaseDatabase db;
public StatusFragment() {}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
binding = FragmentStatusBinding.inflate(inflater,container,false);
return binding.getRoot();
}}
我想展示这个片段中的故事。适配器代码是-
public void onBindViewHolder(@NonNull TopStatusViewHolder holder, int position) {
UserStatus us = US.get(position);
Status lastStatus = us.getStatuses().get(us.getStatuses().size()-1); //showing the recent picture user uploaded
Glide.with(cx).load(lastStatus.getImageUrl()).placeholder(R.drawable.avatar).into(holder.binding.circleImageView);
holder.binding.circularStatusView.setPortionsCount(us.getStatuses().size()); //getting the number of pictures user uploaded
holder.binding.StatusName.setText(us.getName()); //showing the user's name
holder.binding.circularStatusView.setOnClickListener(view -> {
ArrayList<MyStory> myStories = new ArrayList<>();
for(Status status: us.getStatuses()){
myStories.add(new MyStory(status.getImageUrl(), new Date(status.getTimestamp())));
}
new StoryView.Builder(((StatusFragment)cx).getChildFragmentManager()).setStoriesList(myStories)
.setStoryDuration(4000).setTitleText(us.getName())
.setSubtitleText("").setTitleLogoUrl(us.getProfileImage())
.setStoryClickListeners(new StoryClickListeners() {
@Override
public void onDescriptionClickListener(int position) {
}
@Override
public void onTitleIconClickListener(int position) {
}
}).build().show();
});
}
我刚刚展示了 onBindViewHolder 代码部分,因为这就是问题所在。问题就出在这一部分-
StoryView.Builder(((StatusFragment)cx).getChildFragmentManager())
正如您在这里看到的,类型转换使用了 StatusFragment,因为我想在那里显示故事视图。但出现错误,不知道如何解决。我也使用过 getParentFragmentManager() 但同样的错误。错误是-
不可转换的类型;无法将 'android.content.Context' 转换为 'com.joycse.chatty30.fragment.StatusFragment'
正常应该是这样的(据我看到的视频)-
新 StoryView.Builder(((MainActivity)cx).getSupportFragmentManager())
应该有一个活动,并且 getSupportFragmentManager 在那里完美工作,因为我猜这是一个完整的活动,而不是片段。但我想在片段上使用它,而不是在活动上。我应该在这里使用什么来解决该错误?
您需要使用
StoryView.Builder(((StatusFragment)cx).getChildFragmentManager())
因为这是负责处理fragment中交易的管理者。
发生此错误是因为您尝试将 Context 转换为 StatusFragment,并且无法直接将 Context 转换为 Fragment。要在片段中显示 StoryView,您应该获取与片段的托管活动关联的 FragmentManager。
尝试这个来解决错误。
// Use the getActivity() method to get the hosting activity, and then get its FragmentManager.
new StoryView.Builder(getActivity().getSupportFragmentManager()).setStoriesList(myStories)