我有一个提要片段,其主要元素是帖子的RecyclerView。
我正在使用Lisa Wray的Groupie库管理回收站 https://github.com/lisawray/groupie
现在在导航图中,我有一个将提要片段连接到另一个片段的动作,我尝试使用在适配器的绑定函数中创建的on click监听器调用此动作。
val action=FeedFragmentDirections.actionDestinationFeedToDestinationAddToBucket(image.id)
findNavController().navigate(action)
我不断收到错误消息,说navigation destination XXXXX is unknown to this NavController
我尝试在findNavController()
之前添加一些内容,例如viewHolder.itemView
或viewHolder.root
,但没有任何效果。
当我使用viewHolder.itemView.rootView
时出现此错误,而不是View DecorView@a190adf[MainActivity] does not have a NavController set
我不知道DecorView是什么。
有什么想法可以正确实现我的oncick侦听器吗?
答案 0 :(得分:3)
使用itemView似乎也可以工作,因为这就是我在代码中所拥有的:
class RecyclerSettingsItem(
private val activity: MainActivity,
private val settingItem: String
) : Item<GroupieViewHolder>() {
override fun bind(viewHolder: GroupieViewHolder, position: Int) {
var navController: NavController? = null
viewHolder.apply {
with(viewHolder.itemView) {
tvTitle.text = settingItem
itemView.setOnClickListener {
navController = Navigation.findNavController(itemView)
navController!!.navigate(R.id.action_settingsFragment_to_contactTracingFragment)
}
}
}
}
override fun getLayout() = R.layout.rv_settings_item_row
}
答案 1 :(得分:0)
您可以在recylerview适配器构造函数中传递父片段或活动。
class MyRecylerViewAdapter(...your other args.., val parentFragment: Fragment)
然后从您的parentFragment对象中找到navController
parentFragment.findNavController()
答案 2 :(得分:0)
对我有用
// Use the function `run` directly in case the object from `useFetch` has changed (e.g when data change)
const { run } = useFetch();
useEffect(() => {
run("/api/user");
}, [run]);
<ng-template #rt let-r="result" let-t="term">
<li style="color:green">{{r.categoryName}}</li>
<li *ngFor="let item of r['subCategoriesList']">
{{item}}
</li>
<ng-container *ngTemplateOutlet="rt; context: {result:r.repeatTemplate, term: 'kl'}">
</ng-container>
</ng-template>
答案 3 :(得分:0)
只需通过recyclerview适配器类的承包商中的导航控制器即可。 Java示例
public RecyclerAdaptorMasseges(Context context, List<ConfirmationMessagesModuel> data, NavController navController) {
inflate = LayoutInflater.from(context);
this.data = data;
this.navController = navController;
Log.d("hex", " MsgRecyclerAdaptor");
}
答案 4 :(得分:0)
您可以使用'requireView()'
requireView().findNavController().navigate(R.id.your_action)