如何在Android Studio中获取Fragment上下文的SupportFragmentManager

问题描述 投票:0回答:2

我在我的聊天项目中使用 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 在那里完美工作,因为我猜这是一个完整的活动,而不是片段。但我想在片段上使用它,而不是在活动上。我应该在这里使用什么来解决该错误?

java android android-fragments
2个回答
0
投票

您需要使用

StoryView.Builder(((StatusFragment)cx).getChildFragmentManager())

因为这是负责处理fragment中交易的管理者。


0
投票

发生此错误是因为您尝试将 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)
© www.soinside.com 2019 - 2024. All rights reserved.