1

我正在开发一个自定义视图由一些后端逻辑更新的应用程序。自定义视图在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..
}

}

提前致谢..

4

1 回答 1

0
view.invalidate();
loadGraphWithValues();

这些可能应该被切换,因为你首先更新你的视图然后你告诉它重绘自己。另外,你的是什么mChart?是异步的吗?

编辑:我猜这里:

view = mChart.execute(ChartDemo.this);

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

于 2013-07-23T07:28:58.090 回答