关于项目的简短信息:
类代码的一部分:
public class DetailsActivity extends FragmentActivity implements ToplineTrigger {
static Context mContext;
private static FragmentManager fm;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
if (mContext == null)
mContext = Pleazzme.getAppContext();
DetailsTitleFragment title = new DetailsTitleFragment();
DocumentDescriptionWeb description = new DocumentDescriptionWeb();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.detailstitlefragment_wrap, title, "DetailsTitle")
.add(R.id.documentdescriptionweb_wrap, description, "WebDescription")
.commit();
((Topline) fm.findFragmentByTag("Topline")).setDetailsMode();
};
Xml视图:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/details_contentwrapper"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="vertical" >
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
class="com.mtechnologia.pleazzme.Topline"
android:tag="Topline" />
<FrameLayout
android:id="@+id/detailstitlefragment_wrap"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</FrameLayout>
<FrameLayout
android:id="@+id/documentdescriptionweb_wrap"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</FrameLayout>
</LinearLayout>
类声明:
public class DetailsTitleFragment extends ListFragment{...}
public class DocumentDescriptionWeb extends Fragment {
WebView mWebView = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.simplewebview, container);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mWebView = (WebView) view.findViewById(R.id.simplewebview);
mWebView.getSettings().setJavaScriptEnabled(false);
mWebView.getSettings().setSupportZoom(false);
String data = "asdasdasd";
mWebView.loadData(data, "text/html", "utf-8");
}
}
代码运行后我收到错误:
08-15 19:11:08.003: E/AndroidRuntime(24708): FATAL EXCEPTION: main
08-15 19:11:08.003: E/AndroidRuntime(24708): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mtechnologia.pleazzme/com.mtechnologia.pleazzme.DetailsActivity}: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1967)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1992)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.app.ActivityThread.access$600(ActivityThread.java:127)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1158)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.os.Handler.dispatchMessage(Handler.java:99)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.os.Looper.loop(Looper.java:137)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.app.ActivityThread.main(ActivityThread.java:4511)
08-15 19:11:08.003: E/AndroidRuntime(24708): at java.lang.reflect.Method.invokeNative(Native Method)
08-15 19:11:08.003: E/AndroidRuntime(24708): at java.lang.reflect.Method.invoke(Method.java:511)
08-15 19:11:08.003: E/AndroidRuntime(24708): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:980)
08-15 19:11:08.003: E/AndroidRuntime(24708): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:747)
08-15 19:11:08.003: E/AndroidRuntime(24708): at dalvik.system.NativeStart.main(Native Method)
08-15 19:11:08.003: E/AndroidRuntime(24708): Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.view.ViewGroup.addViewInner(ViewGroup.java:3342)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.view.ViewGroup.addView(ViewGroup.java:3213)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.view.ViewGroup.addView(ViewGroup.java:3170)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.view.ViewGroup.addView(ViewGroup.java:3150)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.support.v4.app.NoSaveStateFrameLayout.wrap(NoSaveStateFrameLayout.java:40)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:875)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:523)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1136)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.app.Activity.performStart(Activity.java:4480)
08-15 19:11:08.003: E/AndroidRuntime(24708): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1940)
08-15 19:11:08.003: E/AndroidRuntime(24708): ... 11 more
有人能告诉我,我做错了什么? 我知道,我可以用XML声明这两个片段,但我需要以编程方式添加这些片段,以便在需要时替换它们。 在此先感谢您的帮助
答案 0 :(得分:11)
您需要更改
inflater.inflate(R.layout.simplewebview, container);
到
inflater.inflate(R.layout.simplewebview, container, false);
将该属性设置为false
将确保从视图传入的父容器中分离视图。从View
返回的onCreateView()
无法附加到父级,因为它将在系统本身后不久添加到容器中。