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这个方法,里面什么都不操作。就可以避免横竖屏切换时的界面重叠问题