更换片段后,AndroidCircularSeekBar在片段中无法正确显示

时间:2013-12-05 22:26:13

标签: android android-fragments android-activity

我正在使用带有两个片段的活动。片段#1是登录屏幕。一旦用户登录活动,就会通过片段事务更改片段。第二个片段#2包含circularSeekBar。两个片段都使用xml布局。该活动具有带有FrameLayout(R.id.fragmentContainer)的xml布局。问题是circularSeekBar没有更新它的显示而没有绘制圆圈。 (它只显示小旋钮图像)如果我首先显示circularSeekBar片段而没有登录,它确实有效。如果显示第二个(替换),则只会出现此问题。我尝试过使用circularSeekBar.invalidate()但没有帮助。不知道在哪里打电话或尝试什么。我尝试在Fragment的onResume()&中使用invalidate()。 void onStart()没有运气。我正在onCreateView中引用circularSeekBar。 (正常的东西)。我注意到的另一件事是,如果我尝试触摸它,它将开始工作。 (旋钮。所以它可以刷新一些)

这是我在onCreateView(...)

中引用它的地方
circularSeekBar = (CircularSeekBar)v.findViewById(R.id.circularSeekBar_circular_seek_bar);

        circularSeekBar.setSeekBarChangeListener(new OnSeekChangeListener() 
        {
              @Override
              public void onProgressChange(CircularSeekBar view, int newProgress) 
              {
                        float value = translateValueFromSourceIntervalToDestinationInterval(
                                (float)newProgress,
                                (float)0.0,
                                (float)100.0,
                                (float)65.0,
                                (float)85.0
                        );

                        setpointValue.setText(""+(int)value);
                        updateLeafImage((int)value);
                  }
        });

        circularSeekBar.setProgress(50);
        circularSeekBar.invalidate();

这是我在Activity中替换它的地方:

FragmentManager fm = getFragmentManager();

                Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);

                if(fragment != null)
                {
                    ((LoginFragment) fragment).setDelegate(null);
                }

                Fragment cirFragment = new cirFragment();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();

                transaction.replace(R.id.fragmentContainer,cirFragment);

                // Commit the transaction
                transaction.commit();

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案:

在protected void onMeasure中(int widthMeasureSpec,int heightMeasureSpec) 他们通过getWidth()和getHeight()获得宽度和高度。

我将其更改为:

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
    {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        width = View.MeasureSpec.getSize(widthMeasureSpec);
        height = View.MeasureSpec.getSize(heightMeasureSpec);

这纠正了这个问题。