使用LayoutInflate(视图扩充器)

来源:互联网 发布:圣剑网络 奥特曼 编辑:程序博客网 时间:2024/05/16 13:53

使用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



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


@Overridepublic 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