ViewPager,用canvas.drawPath绘制的线在切换片段时消失

时间:2014-08-11 14:48:02

标签: android android-fragments android-viewpager android-canvas swipe

我为片段制作了一个ViewPager布局和3个布局,每个片段还有一个Activity,first_fragment.java,第二个,第三个。第一个片段包含一个绘制区域,您可以在其中绘制线条。第二个包含按钮,用于选择颜色和笔触宽度。第三个包含使用颜色和宽度的统计信息。

现在的问题是,如果我从第一个扫描到第二个并且后退,绘制的线仍然存在,但如果我从第一个切换到第二个到第三个,然后再返回,则绘制的线条会消失。第二个和第三个片段目前是完全相同的,那么为什么这些线条会消失一次而另一个不会消失呢?

我使用了setOffscreenPageLimit并将限制设置为2.通常,限制为您提供可以向左和向右滑动而不重新创建片段的页数!所以在我的情况下,左边是2,右边是2!

 ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
 pager.setOffscreenPageLimit(2);

2 个答案:

答案 0 :(得分:0)

由于Android系统在ViewPager中从内存中卸载片段,因此行消失。

你有2个解决方案:

  1. 请问ViewPager不会破坏片段:

    ViewPager pager =(ViewPager)findViewById(R.id.viewPager); pager.setOffscreenPageLimit(2);

  2. 使用onSaveInstanceState()回调来保存片段状态并在onCreate(Bundle state)中重新创建片段

    公共类MyFragment扩展Fragment {     private static final String EXTRA_PARAM =“my_custom_param1”;     private static final String EXTRA_PARAM2 =“my_custom_param2”;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
    
        if (savedInstanceState != null) 
        {
             //restore state
             Log.d("restore_state", savedInstanceState.getString(EXTRA_PARAM));
        }
    
        return content;
    
    }
    
    @Override
    public void onSaveInstanceState(Bundle state) {
        super.onSaveInstanceState(state);
    
        state.putString(EXTRA_PARAM, "whatever you want");
        state.putInt(EXTRA_PARAM2, 12345);
      }
    

    }

  3. 第二种解决方案是优选的

答案 1 :(得分:0)

我的解决方案是: 添加以下内容:mPath.reset(); 在canvas.drawPath(

之后