以下是我的代码 . 我想要实现的是我在Recycler视图中显示viewholder . 内部视图寻呼机我正在显示一个片段,在向左滑动我正在显示另一个片段 . 但是当我运行应用程序时 . 应用程序崩溃 . 不知道我哪里出错了 . 我认为这是片段概念的一部分 . 请帮帮我
@Override
public void onBindViewHolder(ManageCustomerViewHolder holder, int position)
{
holder.viewPager.setAdapter(new MyPageAdapter(fragmentManager, fragments));
}
private List<Fragment> getFragments()
{
List<Fragment> fList = new ArrayList<Fragment>();
fList.add(MyFragment.newInstance("Fragment 1"));
fList.add(Myfragment1.newInstance("Fragment 2"));
return fList;
}
public class ManageCustomerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener
{
ViewPager viewPager;
viewPager = (ViewPager) itemView.findViewById(R.id.viewpager);
itemView.setOnClickListener(this);
}
这就是错误:
java.lang.IllegalStateException:片段尚未附加 .
4 回答
我的应用程序中遇到了同样的问题 .
堆栈跟踪:
该应用程序崩溃在这一行:
当片段不再附加到其父活动/片段时会发生这种情况 . 因此,一个简单的
isAdded()
检查应该为您解决此问题 .Fix:
来自documentation:
isAdded() - 如果片段当前已添加到其活动中,则返回true .
将支持库修订更新到27.0.2以解决问题 . 见changelog .
我今天遇到了这个例外 . 在寻找答案后,我注意到所有这些都与ViewPager和getFragmentManger()或我的案例getChildFragmentManager()有关 .
好吧,有时这种情况会发生在没有碎片的情况下,因此无法附加或显示任何内容 . 因此,当我的片段被创建时,我现在将片段管理器保存在一个变量中,然后我在我的Viewpager实例中使用该管理器,这样总是会保存在类中的管理器 . 为了澄清我在这里说的是我的代码:
之前
在这里我遇到了错误,因为我用一些方法重新创建了视图,我也按了后退按钮 . 所以当发生这种情况时,Android正在从片段中寻找一个不再存在或已经消失的getChildFragmentManager()(因为我按了后退按钮)
现在
当我打电话给Viewpager时,我会使用那个经理
我没有再次面对那个例外,因为当我按下并且没有getChildFragmentManager()调用时,我的片段已经消失了
您不应该尝试实例化片段 . 片段已创建并具有由Android系统控制的生命周期 . 您可以通过重写回调方法来响应生命周期事件,例如
onAttached
(当片段附加到Activity
时调用)