昨天上线APP后突然发现一个很严重的问题,就是导航栏显示错误
就是第一次打开APP显示正常,重启APP后导航栏显示错误,有些数据不能显示。
这个BUG很奇怪,测试的时候都没问题的,找了半天发现问题所在
先看下导航功能怎么写的:
布局很简单,就是View+fragment
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_above="@+id/div_tab_bar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/navigation"
android:layout_width="match_parent"
android:layout_height="50dp"
android:layout_alignParentBottom="true"
app:menu="@menu/navigation" />
</RelativeLayout>
实现代码
private OneFragment fragment1;
private TwoFragment fragment2;
private FourFragment fragment3;
private Fragment[] fragments;
private int lastShowFragment = 0;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.navigation_home:
// Toast.makeText(MainFragmentActivity.this,"第一个",Toast.LENGTH_SHORT).show();
if (lastShowFragment != 0) {
switchFrament(lastShowFragment, 0);
lastShowFragment = 0;
}
return true;
case R.id.navigation_dashboard:
// Toast.makeText(MainFragmentActivity.this,"第二个",Toast.LENGTH_SHORT).show();
if (lastShowFragment != 1) {
switchFrament(lastShowFragment, 1);
lastShowFragment = 1;
}
return true;
case R.id.navigation_notifications:
// Toast.makeText(MainFragmentActivity.this,"第三个",Toast.LENGTH_SHORT).show();
if (lastShowFragment != 2) {
switchFrament(lastShowFragment,2);
lastShowFragment = 2;
}
return true;
}
return false;
}
};
onCreate:
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
initFragments();
android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragment_container, fragments[0]);
transaction.show(fragments[0]).commitAllowingStateLoss();
public void switchFrament(int lastIndex, int index) {
android.support.v4.app.FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.hide(fragments[lastIndex]);
if (!fragments[index].isAdded()) {
transaction.add(R.id.fragment_container, fragments[index]);
}
transaction.show(fragments[index]).commitAllowingStateLoss();
}
private void initFragments() {
fragment1 = new OneFragment("");
fragment2 = new TwoFragment("");
fragment3 = new FourFragment("");
fragments = new Fragment[]{fragment1, fragment2, fragment3};
lastShowFragment = 0;
// getSupportFragmentManager().beginTransaction().add(R.id.fragment_container, fragment1).show(fragment1).commit();
}
刚开始以为是这里代码的错误,找了半天也不知道哪里有问题,程序不报错就很难受,报错了还知道是出错了,,,,
后来突然想到,昨天最后发布的时候增加了一个显示天气的功能
这个天气就是一个TextView显示在toolbar里面!!!增加一个线程去获取网络数据
原来就是这里的问题,toolbar里显示TextView有问题???
后来将这个功能换到其他地方,果然就显示正常了,以前的毛病就没了。!!!!!
toolbar以后还是少去动他了 =.=