Очень странная ошибка из-за настройки альбомной ориентации - PullRequest
0 голосов
/ 08 октября 2018

Я устанавливаю альбомную ориентацию для некоторых устройств с включенным во время выполнения внутри onCreate() методом Activity setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

У меня есть пользовательское представление, которое обновляется с помощью

private final Runnable mDraw = new Runnable() {
    @Override
    public void run() {
        if (mMeasurementController != null) {
            mMeasurementController.update();
        }
        invalidate();

        mHandler.removeCallbacks(this);
        mHandler.postDelayed(this, 1000 / 15);
    }
};

onCreate () метод Activity

   protected void onCreate(Bundle savedInstanceState) {

        if (DisplayUtils.isTablet(ActivityClinometer.this)) {
            setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        }


        super.onCreate(savedInstanceState);


        getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);



        setContentView(R.layout.activity_clinometer);
        RelativeLayout layoutContainer = (RelativeLayout) findViewById(R.id.layout_main_container);


        // Add Fragment
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.add(R.id.layout_main_framelayout, new FragmentClinometer()).commit();

        // Set NavigationView with Header and Menu
        bindViews();

        System.out.println("Activity onCreate() " + this);

    }

И одним касанием кнопки я меняю десятичную цифру, чтобы отобразить значение в выбранном десятичном формате с помощью

protected void changeDecimalFormat(int decimalDigit) {
    mDecimalDigit = decimalDigit;


    switch (decimalDigit) {
        case 0:
            mDecimalFormat.setMaximumFractionDigits(0);
            mDecimalFormat.setMinimumFractionDigits(0);

            mPaintText.setTextSize(realPx(150));


            break;

        case 1:
            mDecimalFormat.setMaximumFractionDigits(1);
            mDecimalFormat.setMinimumFractionDigits(1);

            mPaintText.setTextSize(realPx(120));

            break;

        case 2:

            mDecimalFormat.setMaximumFractionDigits(2);
            mDecimalFormat.setMinimumFractionDigits(2);

            mPaintText.setTextSize(realPx(110));
            break;


        case 3:

            mDecimalFormat.setMaximumFractionDigits(3);
            mDecimalFormat.setMinimumFractionDigits(3);

            mPaintText.setTextSize(realPx(100));


            break;
    }

Когда код изменения ориентации установлен, но если установленориентация, сначала я получаю новое значение, а затем старые значения, поэтому отображение не изменяется.

I/System.out:  drawText() digit:  mDecimalDigit: 3
I/System.out:  drawText() digit:  mDecimalDigit: 3
I/System.out: changeDecimalFormat() mDecimalDigit: 2 **I touch the button and change decimal digits to 2**
I/System.out:  drawText() digit:  mDecimalDigit: 3
I/System.out:  drawText() digit:  mDecimalDigit: 2
I/System.out:  drawText() digit:  mDecimalDigit: 3
I/System.out:  drawText() digit:  mDecimalDigit: 2
I/System.out:  drawText() digit:  mDecimalDigit: 2
I/System.out:  drawText() digit:  mDecimalDigit: 3
I/System.out:  drawText() digit:  mDecimalDigit: 2

Потоков не задействовано, это View, который выполняется в потоке пользовательского интерфейса, нет других методов, которые изменяютзначение mDecimalDigit, и это происходит только в том случае, если onCreate () для планшетов вызывается только setRequestedOrientation(android.content.pm.ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);, нигде не вызывается, в противном случае код работает нормально.

Почему это происходит?

Это представление внутри фрагмента, и оно надувается из файла XML.Методы, запускаемые после создания действия, выглядят следующим образом:

I/System.out: Activity onCreate() ActivityClinometer@df4b71
I/System.out: Fragment onCreateView()
I/System.out: changeDecimalFormat() mDecimalDigit: 3
I/System.out: Activity onStop()
I/System.out: Activity onDestroy()
I/System.out: Activity onCreate() ActivityClinometer@6065131
I/System.out: Fragment onCreateView()
I/System.out: Fragment onCreateView()
I/System.out: changeDecimalFormat() mDecimalDigit: 3
I/System.out: changeDecimalFormat() mDecimalDigit: 3
I/System.out: changeDecimalFormat() mDecimalDigit: 3
I/System.out: changeDecimalFormat() mDecimalDigit: 3
...