[英]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.