1

在当前活动中,我正在打印上一个活动中选定股票的收盘价图表(使用 Androidplot)。
在这个活动中,我有一个用户可以覆盖的指标列表的微调器。
现在,我希望使用微调器中的这个新选择重新绘制图形。
我确实尝试刷新/重新加载页面 onItemSelected 但这会导致页面保持刷新,即使不等待用户输入。

public class DispGraph extends Activity {

private XYPlot plotstock;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.graph);

    // PRINTING SELECTED STOCK_NAME

    Bundle bundle = getIntent().getExtras();
    String sname = bundle.getString("SN");
    TextView t = (TextView) findViewById(R.id.textView1);
    t.setText(sname);

    // INDICATOR LIST

    Spinner spinner = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
            this, R.array.Indicators, android.R.layout.simple_spinner_item);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    String iname = spinner.getSelectedItem().toString();
    spinner.setOnItemSelectedListener(new OnItemSelectedListener(){

        @Override
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {
            // TODO Auto-generated method stub
            startActivity(getIntent());
        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {
            // TODO Auto-generated method stub

        }});

    //PASSING STOCK-TICKER & INDICATOR TO PHP



    // PLOTTING GRAPH

    plotstock = (XYPlot) findViewById(R.id.mySimpleXYPlot);
    Number[] series1Numbers = ind;
    Number[] series2Numbers = closing;

    XYSeries series1 = new SimpleXYSeries(Arrays.asList(series1Numbers),SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, iname);
    XYSeries series2 = new SimpleXYSeries(Arrays.asList(series2Numbers),SimpleXYSeries.ArrayFormat.Y_VALS_ONLY, "Closing Price");

    plotstock.setDomainLabel("Date");
    plotstock.setRangeLabel("Price");

    plotstock.addSeries(series1,new LineAndPointFormatter(Color.rgb(0, 200, 0), Color.rgb(0,100, 0), null, new PointLabelFormatter(Color.TRANSPARENT)));
    plotstock.addSeries(series2,new LineAndPointFormatter(Color.rgb(0, 0, 200), Color.rgb(0, 0, 100),null, new PointLabelFormatter(Color.TRANSPARENT)));

    plotstock.setTicksPerRangeLabel(2);

}
}
4

1 回答 1

0

使用您当前的方法,每次用户选择一个微调器值时,您当前的活动将再次启动,因此它将被放在 Android Stack 上。很快,如果用户更改您的微调器 n 次,您应该按 n + 1 次关闭您的应用程序。这是一个非常烦人的行为。

好吧,我不知道 AndroidPlot,但是查看它的 API,我发现了 redraw 方法。所以,我认为你可以尝试这种方式:

每次用户选择微调器值时,我都可以plotstock在调用后进行修改plotstock.redraw()

spinner.setOnItemSelectedListener(new OnItemSelectedListener(){

    @Override
    public void onItemSelected(AdapterView<?> arg0, View arg1,
            int arg2, long arg3) {
        // TODO Auto-generated method stub
        //Change the graphics value here!
        plotstock.redraw();
    }

    @Override
    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub

    }});
于 2013-04-11T12:55:54.343 回答