您的位置:首页 > 移动开发 > Android开发

tabFragment切换避免页面重叠

2016-04-16 00:02 651 查看
viewpager+fragment也可以实现切换fragment,但是这次使用的是一个FrameLayout去切换不同的fragment

采用的是add hide的办法去隐藏fragment和显示fragment,使用replace方法是销毁上一个fragment,去加载另一个fragment,这种方法google都不是推荐的

用replace容易出现页面重叠的问题,而且我们去切换fragment的时候会重新创建一个fragment,这样每次都要获取一下数据,使得app卡顿,耗资源,每次都获取新数据对于用户来说也是流量的问题,这样弊端很大。

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Fragment fragment1, fragment2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.rb_one).setOnClickListener(this);
findViewById(R.id.rb_two).setOnClickListener(this);
setTabSelect(0);
}

public void setTabSelect(int i) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
switch (i) {
case 0:
fragment1 = manager.findFragmentByTag("TAG1");
hideTab(transaction);
if (fragment1 == null) {
fragment1 = new Fragment1();
transaction.add(R.id.fragment, fragment1, "TAG1");
} else {
transaction.show(fragment1);
}

break;
case 1:
fragment2 = manager.findFragmentByTag("TAG2");
hideTab(transaction);
if (fragment2 == null) {
fragment2 = new Fragment2();
transaction.add(R.id.fragment, fragment2, "TAG2");
} else {
transaction.show(fragment2);
}
break;
}

transaction.commit();
}

private void hideTab(FragmentTransaction transaction) {
if (fragment1 != null) {
transaction.hide(fragment1);
}
if (fragment2 != null) {
transaction.hide(fragment2);
}
}

@Override
public void onClick(View v) {

switch (v.getId()) {

case R.id.rb_one:
setTabSelect(0);
break;

case R.id.rb_two:
setTabSelect(1);
break;

}
}
}


这样我们去隐藏或者显示界面就不会出现页面重叠的问题,而且避免了每次切换页面的时候都要重新获取一下数据的问题。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/rg_group" />

<RadioGroup
android:id="@+id/rg_group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">

<RadioButton
android:id="@+id/rb_one"
style="@style/TabBottomStyle"
android:checked="true"
android:text="页面一" />

<RadioButton
android:id="@+id/rb_two"
style="@style/TabBottomStyle"
android:text="页面二" />

</RadioGroup>
</RelativeLayout>

最后发现横竖屏切换的时候还是会出现页面重叠的问题,解决办法是AndroidManifest.xml文件下的对应的activity添加android:configChanges = "orientation|screenSize"这个属性,并在在fragment里面重写onConfigurationChanged这个方法,里面什么都不操作。就可以避免横竖屏切换时的界面重叠问题

Demo链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android