使用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);
但是,我奇怪的是,不知什么原因,大概是此错误写法与第三方库搅合在一起,还报了这么个奇怪的红:
这是,通过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.");
}
}