无法打开另一个片段的片段 [英] Can't open a fragment from another fragment

查看:92
本文介绍了无法打开另一个片段的片段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的 Main2Activity 中有5个片段(家庭,设置,newPost,通知和个人资料).

HomeFragment 内部,我有一个 RecyclerView ,其中包含很多帖子视图,每个帖子都包含一个打开"按钮,应该打开一个 PostFragment .问题是,我只能在populateItemRows()方法的 RecyclerViewAdapter 类中使用 setOnClickListener ,所以当我不能使用 getActivity()时..

Inside HomeFragment I have a RecyclerView with a lot of post views, every post containing a "open" button which should open a PostFragment. The problem is, I can only use setOnClickListener in RecyclerViewAdapter class, in populateItemRows() method, so when I can't use getActivity()..

HomeFragment:

public class HomeFragment extends Fragment{

    private RecyclerView recyclerView;
    private RecyclerViewAdapter recyclerViewAdapter;
    private boolean isLoading = false;
    private ArrayList<String> rowsArrayList = new ArrayList<>();

    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View root = inflater.inflate(R.layout.fragment_home, container, false);

        recyclerView = root.findViewById(R.id.recyclerView);
        initAdapter();
        initScrollListener();

        return root;
    }

    private void initAdapter() {
        recyclerViewAdapter = new RecyclerViewAdapter(getActivity(),2);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        recyclerView.setAdapter(recyclerViewAdapter);
    }

    private void initScrollListener() {
       ...
    }

    private void loadMore() {
        ...
    }
}

RecyclerViewAdapter:


public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private final int VIEW_TYPE_ITEM = 0;
    private final int VIEW_TYPE_LOADING = 1;
    private ArrayList<Post> list = new ArrayList();
    private static final String TAG = RecyclerViewAdapter.class.getSimpleName();
    private String userId = FirebaseAuth.getInstance().getCurrentUser() != null ? FirebaseAuth.getInstance().getCurrentUser().getUid() : null;
    private FirebaseFirestore db = FirebaseFirestore.getInstance();
    private Context context;
    private User currentUser;
    private int type;

    public RecyclerViewAdapter(Context context, int type) {
        this.context = context;
        this.type = type;
        if (type == 0) {
            myPostsRetriever(context);
        } else if (type == 1) {
            appliedToPostsRetriever(context);
        } else if (type == 2) {
            homePostsRetriever(context);
        }
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        ...
    }

    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
        if (viewHolder instanceof ItemViewHolder) {
            populateItemRows((ItemViewHolder) viewHolder, position);
        } else if (viewHolder instanceof LoadingViewHolder) {
            showLoadingView((LoadingViewHolder) viewHolder, position);
        }
    }

    private void populateItemRows(ItemViewHolder viewHolder, int position) {
...

        viewHolder.itemView.findViewById(R.id.seePostButton).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

        Fragment newFragment = new PostFragment();
        FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
        transaction.replace(R.id.mobile_navigation, newFragment);
        transaction.addToBackStack(null);
        transaction.commit();
            }
        });
    }

推荐答案

您需要从构造中获取Context对象.

You need Context object from construction.

FragmentTransaction fm = ((AppCompatActivity) context).getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.mobile_navigation, newFragment);
transaction.addToBackStack(null);
transaction.commit();

这篇关于无法打开另一个片段的片段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆