tabFragment切换避免页面重叠

来源:互联网 发布:360.cn 域名价格 编辑:程序博客网 时间:2024/05/01 07:57

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链接

0 0