AndroidAutoSize icon indicating copy to clipboard operation
AndroidAutoSize copied to clipboard

Activity#onCreate方法中添加HomeFragment,使用FragmentTransaction#commitNow()、FragmentTransaction#commitNowAllowingStateLoss()或者FragmentTransaction#commit() + fragmentManager.executePendingTransactions()这些方式添加Fragment时,第一个Fragment适配失败。

Open tinyvampirepudge opened this issue 5 years ago • 1 comments

Environment

  • [x] Autosize Version: 1.2.1
  • [x] Target Android Version: Android 9.0, api28
  • [x] Device Model: huawei mate 10 pro
  • [x] Device Resolution: 1080px * 2160px
  • [x] Design Size On AndroidManifest: 375dp * 667dp

Bug Description:

需求:Activity中存在多个,第一个Fragment想实现按照高度适配。

在Activity#onCreate方法中添加HomeFragment,使用commit方法添加Fragment时,适配没有问题;

但是使用FragmentTransaction#commitNow()FragmentTransaction#commitNowAllowingStateLoss()或者FragmentTransaction#commit() + fragmentManager.executePendingTransactions()这些方式添加Fragment时,添加的第一个Fragment就不会按照高度适配,会跟随父Activity的适配走。

Log:


E/autosize: MainActivity#onCreate DisplayMetrics:    
    density: 3.12
    densityDpi: 499
    scaledDensity: 3.12
E/autosize: HomePageFragment#onCreate DisplayMetrics:   
    density: 3.12
    densityDpi: 499
    scaledDensity: 3.12
E/autosize: HomePageFragment#getSizeInDp
E/autosize: HomePageFragment#isBaseOnWidth
E/autosize: HomePageFragment#onCreateView DisplayMetrics:
    density: 3.12
    densityDpi: 499
    scaledDensity: 3.12
E/autosize: HomePageFragment#onViewCreated DisplayMetrics:
    density: 3.12
    densityDpi: 499
    scaledDensity: 3.12

Related Code:


HomePageFragment实现了 CustomAdapt接口,isBaseOnWidth返回false。
public class HomePageFragment extends Fragment implements CustomAdapt {
    @Override
    public boolean isBaseOnWidth() {
        Log.e("autosize","HomePageFragment#isBaseOnWidth");
        return false;
    }

    @Override
    public float getSizeInDp() {
        Log.e("autosize","HomePageFragment#getSizeInDp");
        return 1334 / 2.0f;
    }
}

MainActivity#onCreate中添加Fragment的方法:
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
// 1
transaction.add(R.id.fl_container, frag, fragmentTags[currentTabIndex]).show(frag).commitNow();
// 2
// transaction.add(R.id.fl_container, frag, fragmentTags[currentTabIndex]).show(frag).commitNowAllowingStateLoss();
// 3
// transaction.add(R.id.fl_container, frag).show(frag).commit();
// fragmentManager.executePendingTransactions();

Others:

tinyvampirepudge avatar Jul 23 '20 07:07 tinyvampirepudge

https://github.com/JessYanCoding/AndroidAutoSize/blob/master/demo/src/main/java/me/jessyan/autosize/demo/CustomFragment1.java#L47

JessYanCoding avatar Aug 01 '20 03:08 JessYanCoding