为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2023-05-10 15:38:19
我试图从一个片段 (A) 导航到另一个片段 (B),但是片段,但第一个片段 (A) 有一个 recyclerView 意思是当我点击任何项目时我应该导航到下一个。我正在使用 android 导航组件,但我无法解析该方法findNavController(xxx),因为它需要片段的 ApplicationContext。, 因为我试过v.getContext(), v.getApplicationContext(), mContext, 但没有运气。我该如何解决这个问题,下面是onBindViewHolder()RecyclerView Adapter 类中的。?解决这个问题的最好方法是什么@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);            }        });    }
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

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)

希望它会有所帮助)


查看完整回答
反对 回复 2023-05-10
  • 1 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信