从片段的适配器 (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)
希望对您有所帮助)
我正在尝试从一个片段 (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)
希望对您有所帮助)