Android 安卓&x27;FragmentManager已在执行事务';当notifydatasetchanged在ui线程上运行时
我将表格布局与查看页面一起使用。我的选项卡布局中有两个选项卡,它们都有相同片段对象的不同实例。两个片段也有相同的回收器视图布局 问题:在取回服务器对象后加载整个活动时,我试图用新对象填充两个选项卡视图,但出现以下错误:Android 安卓&x27;FragmentManager已在执行事务';当notifydatasetchanged在ui线程上运行时,android,android-fragments,android-recyclerview,android-viewpager,Android,Android Fragments,Android Recyclerview,Android Viewpager,我将表格布局与查看页面一起使用。我的选项卡布局中有两个选项卡,它们都有相同片段对象的不同实例。两个片段也有相同的回收器视图布局 问题:在取回服务器对象后加载整个活动时,我试图用新对象填充两个选项卡视图,但出现以下错误: java.lang.IllegalStateException: FragmentManager is already executing transactions 。因此,在我的主要活动中: public class MyMainActivity extends Fragm
java.lang.IllegalStateException: FragmentManager is already executing
transactions
。因此,在我的主要活动中:
public class MyMainActivity extends FragmentActivity {
private TabLayout tabLayout;
private ViewPager viewPager;
private MyAdapter adapter;
private MyFragment fragmentA;
private MyFragment fragmentB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.my_activity);
tabLayout = (TabLayout)findViewById(R.id.tab_layout);
viewPager = (ViewPager)findViewById(R.id.view_pager);
adapter = new MyAdapter(getSupportFragmentManager(), new
ArrayList<>(), new ArrayList<>());
// Instantiate the fragments here
adapter.addFragment(....A, "Title A");
adapter.addFragment(....B, "Title B");
.....
.....
.....
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
}
public void refreshPage() {
runOnUiThread(new Runnable() {
@Override
public void run() {
// This line crashes
adapter.notifyDataSetChanged();
}
});
}
}
公共类MyMainActivity扩展了FragmentActivity{
私人摊位摊位;
私人视页机视页机;
专用MyAdapter适配器;
私有myfragmenta;
私有myfragmentb;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.my_活动);
tabLayout=(tabLayout)findviewbyd(R.id.tab\u布局);
viewPager=(viewPager)findViewById(R.id.view\u pager);
adapter=new MyAdapter(getSupportFragmentManager(),新建
ArrayList(),新的ArrayList());
//在这里实例化片段
adapter.addFragment(…A,“标题A”);
adapter.addFragment(…B,“标题B”);
.....
.....
.....
viewPager.setAdapter(适配器);
tabLayout.setupWithViewPager(viewPager);
}
公共网页(){
runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
//这条线坏了
adapter.notifyDataSetChanged();
}
});
}
}
我尝试使用getChildFragmentManager,但我不能,因为您需要通过片段对象调用它我不能显示太多代码,因为大部分代码是专有的,我必须使代码尽可能通用。
当我注释掉崩溃的行时,除非我滚动,否则第一个选项卡的回收器视图不会刷新。,而第二个选项卡根本不会刷新。以前有人有过同样的问题吗?你是怎么解决的
p.S我没有使用任何FragmentManager或事务,因此我不确定它为什么会给我这个例外。可能已经在@TylerV中解决了。是的,我尝试了那里的大多数建议,以及其他类似的问题,这就是为什么我现在问自己的问题。正如我提到的,childFragmentManager()需要首先将片段实例附加到活动…提供更多堆栈跟踪。