使用onResume()重新渲染视图

时间:2011-03-11 22:00:07

标签: android view

当我的应用程序加载到模拟器或设备时,它会呈现我想要的屏幕,包括带有“图形”的视图。假设我然后点击菜单按钮,在没有选择任何菜单选项的情况下,点击后退按钮。屏幕不再显示“视图”图表。

它的类型为View_PieChart,它扩展了View。以下是XML资源文件的相关块:

<org.test.View_PieChart
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:id="@+id/graph"
    android:background="#000"
/>

这是我正在使用的onResume()函数。同样,它在应用程序最初启动时显示“图形”,但是一旦启动另一个Activity,然后用户点击“返回”按钮,它就无法绘制“图形”。

protected void onResume() {
    super.onResume();
    int MaxCount = 100;
    View_PieChart graph = (View_PieChart) findViewById(R.id.graph);
    Display display = ((WindowManager)
       getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
    graph.setGeometry(width, width, 15, 15, 15, 15);
    graph.setData(PieData, MaxCount);   
}

我已经梳理了大量文档(包括活动生命周期文档),但感觉在View“生命周期”中有一些我不理解的东西。任何建议表示赞赏。

1 个答案:

答案 0 :(得分:1)

您是否打算在setGeometery()中传递“width”两次?

此外,问题可能是在调用onResume()时,视图布局尚未完成,因此操纵几何图形不会按预期工作。 onCreate()中也存在同样的问题。

我遇到了类似的问题,发现解决方案是创建一个OnGlobalLayoutListener(),它将在布局完成时调用。例如,

    mTopView = (RelativeLayout)findViewById(R.id.topView);
    mTopView.getViewTreeObserver().addOnGlobalLayoutListener(
        new ViewTreeObserver.OnGlobalLayoutListener(){
        @Override
        public void onGlobalLayout() {
        // Do here anything that relies on view dimensions being settled        
        }
    });