Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/224.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:Graphview在onResume中更新,但通过invalidate()方法失败_Android_Graph_Android View_Invalidation - Fatal编程技术网

Android:Graphview在onResume中更新,但通过invalidate()方法失败

Android:Graphview在onResume中更新,但通过invalidate()方法失败,android,graph,android-view,invalidation,Android,Graph,Android View,Invalidation,我正在开发一个应用程序,其中一个自定义视图由一些后端逻辑更新。自定义视图是在onResume()方法中精细更新的,但不能通过view.invalidate()更新。 我希望点击按钮后视图得到更新 代码片段如下所示: public class ChartDemo extends Activity { private IDemoChart mChart; Button displayGraph, reloadGraph; LinearLayout linearLayout; View view;

我正在开发一个应用程序,其中一个自定义视图由一些后端逻辑更新。自定义视图是在
onResume()方法中精细更新的,但不能通过
view.invalidate()更新。
我希望点击按钮后视图得到更新

代码片段如下所示:

public class ChartDemo extends Activity {
private IDemoChart mChart;

Button displayGraph, reloadGraph;
LinearLayout linearLayout;
View view;

Random randomData, randomBattery;
int data, battery;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    mChart = new SalesStackedBarChart();

    reloadGraph = (Button) findViewById(R.id.reloadView);

    linearLayout = (LinearLayout) findViewById(R.id.linearLayout);

    view = new View(ChartDemo.this);
    loadGraphWithValues();

    reloadGraph.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            view.invalidate();
            loadGraphWithValues();
            // view = mChart.execute(ChartDemo.this);
        }
    });

    linearLayout.addView(view);
}

public void loadGraphWithValues() {
    data = generateDataValue();
    battery = generateBatteryValue();

    ListData list = new ListData();
    list.setData(data, battery);

    SalesStackedBarChart.values.add(list);

    view = mChart.execute(ChartDemo.this);
}

public int generateBatteryValue() {
    // TODO Auto-generated method stub
    randomData = new Random();
    return randomData.nextInt(100) + 1;
}

public int generateDataValue() {
    // TODO Auto-generated method stub
    randomBattery = new Random();
    return randomBattery.nextInt(100) + 1;
}

public class ListData {
    double data;
    double battery;

    // getter and setter methods..
}

}
提前谢谢

view.invalidate();
loadGraphWithValues();
这些可能应该被切换,因为您首先更新视图,然后告诉它重新绘制自己。另外,您的
mChart
是什么?是异步的吗

编辑:我想在这里:

view = mChart.execute(ChartDemo.this);

您正在创建一个新视图,但实际上并未将其附着到布局。尝试将返回的视图替换布局中的现有视图。

谢谢您的回复。麦克哈特是条形图的一个例子。它的execute()方法返回图形视图(即条形图)。不,值被插入到列表中,但我无法显示。当我重新启动应用程序时,图形被更新。我已经用这种方式添加了它
linearLayout.addView(视图)尝试将该行作为最后一条指令放入loadGraphWithValues()中。