簡體   English   中英

從片段的適配器(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 Adapter類中的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)

希望對你有幫助)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM