从片段的适配器 (A) 导航到另一个片段 (B) 时无法解析上下文或应用程序

Can't resolve the Context or Application while navigating from Adapter of a fragment(A) to another Fragment (B)

我正在尝试从一个片段 (A) 导航到另一个片段 (B),但是片段,但第一个片段 (A) 有一个 recyclerView,这意味着当我单击任何项​​目时我应该导航到下一个。我正在使用 android 导航组件,但我无法解析方法 findNavController(xxx),因为它需要片段的 ApplicationContext。 ,因为我尝试了 v.getContext()v.getApplicationContext()mContext,但没有运气。

我该如何解决这个问题,下面是 RecyclerView 适配器 class 中的 onBindViewHolder()。 ?

解决此问题的最佳方法是什么

@Override
    public void onBindViewHolder(@NonNull final CoordinatesViewHolder holder, int position) {

        final Coordinates coord = mCoordinates.get(position);
        holder.place_name.setText(coord.getmUPlaceName());
        holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

               NavHostFragment.findNavController(xxx).navigate(R.id.action_bookmarking_to_weatherFragment);
            }
        });



    }

RecyclerView 的适配器不负责重定向到另一个片段。

创建类似

的界面
public interface OnItemClickListener {
    void onItemClicked(int position)
}

在 RecyclerView 的适配器中添加方法:

public class YourAdapterName extend RecyclerView.Adapter...
    private OnItemClickListener onItemClickListener

    void setOnItemClickListener(OnItemClickListener listener) {
        onItemClickListener = listener
    }

...

    @Override
    public void onBindViewHolder(@NonNull final CoordinatesViewHolder holder, int position) {
        final Coordinates coord = mCoordinates.get(position);
        holder.place_name.setText(coord.getmUPlaceName());
        holder.view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(onItemClickListener != null) {
                     onItemClickListener.onItemClicked(position)
                }
            }
        });
    }

在带有回收器的片段中,在设置适配器的地方添加代码:

YourAdapterClassName adapter = new YourAdapterClassName(...init adapter...)
adapter.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClicked(int position) {
         //Navigate here 
    }
})
yourRecyclerName.setAdapter(adapter)

希望对您有所帮助)