viewpager + FragmentPagerAdapter + fragment切换报错

loveobjc 2015-02-13 10:59:11


public class MainPagerAdapter extends FragmentPagerAdapter {
List<Fragment> list ;

public MainPagerAdapter(FragmentManager frm, List<Fragment> list) {
super(frm);
this.list = list ;

}

@Override
public int getCount() {

return list.size();

}

@Override
public Fragment getItem(int position) {
return list.get(position);
}

}

public class MainActivity extends BaseActivity {

private ViewPager main_viewPager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

initViewPager();


}


public void initViewPager() {
main_viewPager = (CustomerViewPager) findViewById(R.id.main_ViewPager);
List<Fragment> fragmentList = new ArrayList<Fragment>() ;
MapFragment mapFragment = new MapFragment();
ChatListFragment1 chatListFragment = new ChatListFragment1();
DiscoverFragment discoverFragment = new DiscoverFragment();
SettingFragment settingFragment = new SettingFragment();
fragmentList.add(mapFragment);
fragmentList.add(chatListFragment);
fragmentList.add(discoverFragment);
fragmentList.add(settingFragment);

//设置ViewPager的设配器
main_viewPager.setAdapter(new MainPagerAdapter(getSupportFragmentManager(), fragmentList));
main_viewPager.requestDisallowInterceptTouchEvent(true);
//当前为第一个页面
main_viewPager.setCurrentItem(0);
//ViewPager的页面改变监听器s
main_viewPager.setOnPageChangeListener(new MyViewPagerListner());
}
}
public class DiscoverFragment extends Fragment implements OnClickListener {


public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(v == null) {
v = inflater.inflate(R.layout.fragment_discover, container, false);
}
return v;
}
}


public class SettingFragment extends Fragment implements OnClickListener {


public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(v == null) {
v = inflater.inflate(R.layout.fragment_setting, container, false);

}
return v;
}
}

public class ChatListFragment1 extends Fragment {

private view v;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

if(v == null) {
v = inflater.inflate(R.layout.contact_list, container, false);
}
return v;
}
}


我在切换fragment时,会报The specified child already has a parent. You must call removeView() on the child's parent first.,请问是什么原因导致的,应该如何修改以至于不报错. 疑惑这个父视图不知道什么时候又添加了。我已经inflater方法已经设置了false了,为什么还会有这种情况。
...全文
209 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
山城忙碌人 2016-06-24
  • 打赏
  • 举报
回复
楼主解决了吗,我也遇到了这个问题!
alskar_dream 2016-06-01
  • 打赏
  • 举报
回复
谢楼主的经验
loveobjc 2015-02-13
  • 打赏
  • 举报
回复
引用 楼主 hulovexj 的回复:


public class MainPagerAdapter extends FragmentPagerAdapter {
	List<Fragment> list ;
	
	public MainPagerAdapter(FragmentManager frm, List<Fragment> list) {
		super(frm);
		this.list = list ;
		
	}
	
	@Override
	public int getCount() {
		
		return list.size();
		
	}

	@Override
	public Fragment getItem(int position) {
		return list.get(position);
	}
	
}

public class MainActivity extends BaseActivity {
	
	private ViewPager main_viewPager;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		setContentView(R.layout.activity_main);
	
		initViewPager();


	}
	

	public void initViewPager() {
		main_viewPager = (CustomerViewPager) findViewById(R.id.main_ViewPager);
		List<Fragment> fragmentList = new ArrayList<Fragment>() ;
		MapFragment mapFragment = new MapFragment();
		ChatListFragment1 chatListFragment = new ChatListFragment1();
		DiscoverFragment discoverFragment = new DiscoverFragment();
		SettingFragment settingFragment = new SettingFragment();
		fragmentList.add(mapFragment);
		fragmentList.add(chatListFragment);
		fragmentList.add(discoverFragment);
		fragmentList.add(settingFragment);
		
		//设置ViewPager的设配器
		main_viewPager.setAdapter(new MainPagerAdapter(getSupportFragmentManager(), fragmentList));
		main_viewPager.requestDisallowInterceptTouchEvent(true);
		//当前为第一个页面
		main_viewPager.setCurrentItem(0);
		//ViewPager的页面改变监听器s
		main_viewPager.setOnPageChangeListener(new MyViewPagerListner());
	}
}
public class DiscoverFragment extends Fragment implements OnClickListener {

	
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		if(v == null) {
			v = inflater.inflate(R.layout.fragment_discover,  container, false);
		} 
		return v;
	}
}


public class SettingFragment extends Fragment implements OnClickListener {

	
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		if(v == null) {
			v = inflater.inflate(R.layout.fragment_setting,  container, false);
			
		} 
		return v;
	}
}

public class ChatListFragment1 extends Fragment {
	
	private view v;
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
		
		if(v == null) {
			v = inflater.inflate(R.layout.contact_list, container, false);
		}
		return v;
	}
}
我在切换fragment时,会报The specified child already has a parent. You must call removeView() on the child's parent first.,请问是什么原因导致的,应该如何修改以至于不报错. 疑惑这个父视图不知道什么时候又添加了。我已经inflater方法已经设置了false了,为什么还会有这种情况。
这两种我都试了没有用
_xianfeng99 2015-02-13
  • 打赏
  • 举报
回复
用这种 View v = inflater.inflate(R.layout.contact_list, null); 或 v = inflater.inflate(R.layout.contact_list, null, false);

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧