我需要替换Fragment一个Activity与另一个Fragment,下面是层文件Activity:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/home_layout_container">
<fragment android:name="com.foo.FragA"
android:id="@+id/home_list"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</FrameLayout>
Run Code Online (Sandbox Code Playgroud)
所以默认情况下有FragA,现在我想在活动中用FragB替换它,我做了:
public void onRegionClicked(Region region) {
RegionInfoFragment rif = RegionInfoFragment.newInstance(region);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.home_list, rif);
}
Run Code Online (Sandbox Code Playgroud)
但我得到了例外:
>6:24:40.685: ERROR/AndroidRuntime(9194): Uncaught handler: thread main exiting due to uncaught exception
05-06 16:24:40.692: ERROR/AndroidRuntime(9194): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
05-06 16:24:40.692: ERROR/AndroidRuntime(9194): …Run Code Online (Sandbox Code Playgroud) 我正在创建一个包含一个片段的三个选项卡,现在我想用同一个选项卡中的新片段替换第一个Tab的片段.如何保持标签保持不变?
我的代码 -
Tab_Widget.java
public class Tab_Widget extends TabActivity {
TabHost tabHost;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tab_host);
tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec("Tab1")
.setIndicator("Tab1")
.setContent(new Intent().setClass(this, main_activity.class)));
tabHost.addTab(tabHost.newTabSpec("Tab2")
.setIndicator("Tab2")
.setContent(new Intent().setClass(this, second_activity.class)));
tabHost.addTab(tabHost.newTabSpec("Tab3")
.setIndicator("Tab3")
.setContent(new Intent().setClass(this, third_activity.class)));
tabHost.setCurrentTab(0);
}
}
Run Code Online (Sandbox Code Playgroud)
main_activity.java
public class main_activity extends FragmentActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainfragment);
}
}
Run Code Online (Sandbox Code Playgroud)
main_fragment.java
public class main_fragment extends Fragment
{
LinearLayout mLayout;
Button mButton;
@Override
public …Run Code Online (Sandbox Code Playgroud) 我知道SO有关问题的帖子有各种各样的问题,但没有一个问题能为我提供解决方案.我有4个标签fragment activity,每个标签都有自己的标签fragment.我要进入另一个fragment里面.当我切换到标签时,它有时会重叠并且两者都可见.
这是代码(xml):
<Button
android:id="@+id/checkBal"
android:layout_width="fill_parent"
android:layout_height="45dp"
android:clickable="false"
android:gravity="left|center_vertical"
android:typeface="serif" />
<View
android:layout_width="fill_parent"
android:layout_height="2dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="2dp"
android:background="@color/green" />
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_width="match_parent"
android:layout_height="0dip"
android:layout_weight="1" />
<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0" />
</android.support.v4.app.FragmentTabHost>
Run Code Online (Sandbox Code Playgroud)
public class Tab_Activity extends FragmentActivity {
FragmentTabHost mHost;
Button balance;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.tabs);
balance = (Button) findViewById(R.id.checkBal);
mHost = (FragmentTabHost) findViewById(android.R.id.tabhost);
mHost.setup(this, getSupportFragmentManager(), R.id.realtabcontent);
mHost.addTab(mHost.newTabSpec("Home").setIndicator("Home"), …Run Code Online (Sandbox Code Playgroud)