使用LayoutInflate(视图扩充器)

使用fragment遇到一个奇怪的问题:


09-02 01:08:48.885: E/AndroidRuntime(12216): FATAL EXCEPTION: main
09-02 01:08:48.885: E/AndroidRuntime(12216): Process: com.astuetz.viewpager.extensions.sample, PID: 12216
09-02 01:08:48.885: E/AndroidRuntime(12216): java.lang.StackOverflowError
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.widget.TextView.jumpDrawablesToCurrentState(TextView.java:4789)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5488)
09-02 01:08:48.885: E/AndroidRuntime(12216): at android.view.ViewGroup.jumpDrawablesToCurrentState(ViewGroup.java:5



很奇怪,很奇怪,经过各种不服,原来错在这里:


@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View view = inflater.inflate(R.layout.fragment_text, container);//错误代码

		Log.d("测试", container+" ");
		return view;
}



此处正确写法:

View view = inflater.inflate(R.layout.fragment_text, container,false);

View view = inflater.inflate(R.layout.fragment_text, null,false);


第一个参数,布局文件,需要扩建成view的xml文件,第二个参数,view的根view(root),第三个参数,是否将该view依附到根view上。

此处通过解析xml布局文件生成view,这个view就没有什么根view,没有什么parent,它本身就是根view,所以不需要依附到哪个地方,依附到container当然就崩溃了。


于是知道此处:
View view = inflater.inflate(R.layout.fragment_text, container);
等同于
View view = inflater.inflate(R.layout.fragment_text, container,true);


但是,我奇怪的是,不知什么原因,大概是此错误写法与第三方库搅合在一起,还报了这么个奇怪的红:

exception>>>>>>> The specified child already has a parent. You must call removeView() on the child's parent first.

这是,通过xml创建出来的view已经依附到了一个parent或根view了,再次parent.addView(view)导致的异常抛出。

抛出的源码为:

 private void addViewInner(View child, int index, LayoutParams params,
            boolean preventRequestLayout) {

        if (child.getParent() != null) {
            throw new IllegalStateException("The specified child already has a parent. " +
                    "You must call removeView() on the child's parent first.");
        }

      }









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值