java - 从适配器单击切换到片段
问题描述
我在项目中有一个 BackStack,为了实现从片段到片段的转换,我使用以下
public void showFragment(@NonNull Fragment fragment) {
showFragment(fragment, true);
}
public void showFragment(@NonNull Fragment fragment, boolean addToBackStack) {
if (curFragment != null && addToBackStack) {
pushFragmentToBackStack(curTabId, curFragment);
}
replaceFragment(fragment);
}
private void replaceFragment(@NonNull Fragment fragment) {
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction tr = fm.beginTransaction();
tr.replace(R.id.content, fragment);
tr.commitAllowingStateLoss();
curFragment = fragment;
}
但是我需要通过单击 recyclerView 中的项目来进入片段,为此,我为每个item
. 并添加onBindViewHolder
了 Adapter
这个
@Override
public void onBindViewHolder(MenuViewHolder holder, int position) {
ItemMenu Item = ItemMenuList.get(position);
holder.tv_menu.setText(Item.getMenuText());
holder.getAdapterPosition();
holder.cv_menu.setOnClickListener(v ->
{
switch (Item.getInitialPositon()) {
case 0: {
((MainActivity) requireActivity()).showFragment(Fragment_Tasks.newInstance());
break;
}
case 1: {
break;
}
}
});
}
问题是过渡需要context()
. 如何解决?
解决方案
您可以从 ViewHolder 获取上下文
holder.itemView.getContext()
但是真的不推荐
最佳做法是在适配器中添加 onclick 接口,然后将其实现到您的片段
推荐阅读
- r - 使用 R Plotly 自定义饼图中的图例条目
- google-analytics - 如何在 Google Analytics 中删除以 restful URL 结尾的数字 id?
- sql - 大查询:使用 between 函数对“日期”使用 case 命令
- javascript - json stringify删除括号外的文本
- android - android.view.View.systemUiVisibility 已弃用。什么是替代品?
- c++ - 如何使用 Gps 和指南针开发对点移动算法
- scope - Stan:函数中的局部作用域
- android - react native mapbox在发布APK中不加载地图
- azure - 将本地 xamarin SQLite 数据库与 Azure 表存储后端同步
- html - 文本换行,css