片段与另一个片段重叠
Posted
技术标签:
【中文标题】片段与另一个片段重叠【英文标题】:Fragment getting overlapped on another fragment 【发布时间】:2013-06-30 00:45:14 【问题描述】:我知道SO
上发布了与该问题相关的各种问题,但没有一个为我提供解决方案。我在 fragment activity
中有 4 个标签,每个标签都有自己的 fragment
。我将进入其中的另一个fragment
。当我切换到选项卡时,有时它会重叠并且两者都是可见的。
这里是代码(xml):
<Button
android:id="@+id/checkBal"
android:layout_
android:layout_
android:clickable="false"
android:gravity="left|center_vertical"
android:typeface="serif" />
<View
android:layout_
android:layout_
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginTop="2dp"
android:background="@color/green" />
<FrameLayout
android:id="@+id/realtabcontent"
android:layout_
android:layout_
android:layout_weight="1" />
<android.support.v4.app.FragmentTabHost
android:id="@android:id/tabhost"
android:layout_
android:layout_ >
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_
android:layout_
android:layout_weight="0" />
</android.support.v4.app.FragmentTabHost>
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"),
Home_Fragment.class, null);
mHost.addTab(mHost.newTabSpec("Number").setIndicator("Send to number"),
Number_Fragment.class, null);
mHost.addTab(
mHost.newTabSpec("Contact").setIndicator("Send to contacts"),
Contact_Fragment.class, null);
mHost.addTab(mHost.newTabSpec("Group").setIndicator("Send to groups"),
Group_Fragment.class, null);
mHost.setOnTabChangedListener(new OnTabChangeListener()
@Override
public void onTabChanged(String tabId)
// TODO Auto-generated method stub
if (tabId.equalsIgnoreCase("Home"))
Home_Fragment home = new Home_Fragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.realtabcontent, home, "Home");
ft.commit();
if (tabId.equalsIgnoreCase("Number"))
Number_Fragment number = new Number_Fragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.realtabcontent, number, "Number");
ft.commit();
if (tabId.equalsIgnoreCase("Contact"))
Contact_Fragment contact = new Contact_Fragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.realtabcontent, contact, "Contact");
ft.commit();
if (tabId.equalsIgnoreCase("Group"))
Group_Fragment group = new Group_Fragment();
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.realtabcontent, group, "Group");
ft.commit();
);
public void newFragment(Fragment fragment, String tag)
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
//
if (tag.equalsIgnoreCase("Group"))
ft.remove(new Group_Fragment());
else
ft.remove(new Contact_Fragment());
ft.replace(R.id.realtabcontent, fragment);
ft.addToBackStack(null);
ft.commit();
public void updateContacts(ArrayList<String> cList)
FragmentManager manager = getSupportFragmentManager();
Contact_Fragment contactFrag = (Contact_Fragment) manager
.findFragmentByTag("Contact");
contactFrag.updateData(cList);
在新片段中调用片段
mActivity.newFragment(new Select_Group_Fragment(), "Group");
当我从另一个片段中调用片段时,我需要在 Tab_Activity
new fragment
方法中添加 addToBackStack
请大家帮忙
【问题讨论】:
一张图片可能有助于显示重叠span> overlapp 可能是布局引起的。如果您使用RelativeLayout
而不指定视图出现的顺序或FrameLayout
,则可能会发生这种不可预知的行为
@dymmeh 附上截图
您是否为片段布局提供了背景?这可能是您发现重叠视图的原因。它发生在我身上,当为片段布局的根视图提供背景颜色时得到解决。
【参考方案1】:
根据我在 Fragments 上看到的所有内容,即 Google IO、*** 等,这不是处理它的方法。活动应该控制哪些片段是活动的。片段应该服从片段控制的活动。您可能必须将片段之间的数据传递给活动。谷歌开发者强烈反对片段到片段的通信。片段是屏幕的子集。
您的叠加似乎同时有 2 个片段处于活动状态。
仅供参考。最好使用 Fragment Transactions 在一个 Activity 中操作多个 Fragment。启动一个从 xml 启动片段的 Activity 并不能真正被 Fragment Transactions 操作。
希望这会有所帮助。
【讨论】:
【参考方案2】:在AndroidMainifest.xml 中更改:
android:name=".activities.youactivityname"
android:configChanges="screenSize|orientation"
【讨论】:
【参考方案3】:layout.removeAllViews();
使用它来删除以前的视图
【讨论】:
以上是关于片段与另一个片段重叠的主要内容,如果未能解决你的问题,请参考以下文章