如何从另一个活动中调用onClick方法按钮

时间:2013-08-07 03:59:13

标签: android

我有两个名为Main和Results的活动。在主要内容中,我有一个START按钮,用于将用户输入的数据发送到蓝牙设备,从BT设备读回测量数据,处理数据,然后在结果活动中对其进行图形化。在结果活动中,我希望有另一个START按钮执行完全相同的功能,因此用户无需继续切换屏幕以进行另一次测量。我在Main活动中设置了START按钮,因此我可以从Results活动中调用。这似乎有效,但每次再次按下START按钮时,它会继续打开更多结果活动。我尝试通过每次按下结果活动中的START按钮时调用finish()来解决此问题。这可以工作,但会导致屏幕短暂地回到主要活动,然后再次收集所有数据后再返回到结果活动。我想继续关注结果活动,只看图表发生变化。

1。)我不相信它具有静态函数/变量的良好实践。有没有更好的方法从另一个活动中调用此START方法?

2.。)有关如何关闭结果活动的任何建议,以避免重复,但防止屏幕在活动之间快速来回变换。

主要活动的START方法:

public static void start_sweep(View view) { 
    try{
        System.out.println("in start_sweep");
        What_Button =  0;
        start_freq = Double.parseDouble(start_freq_input.getText().toString());
        stop_freq = Double.parseDouble(stop_freq_input.getText().toString());;
        step_size = Double.parseDouble(step_size_input.getText().toString());;
        System.out.println(start_freq + " " + stop_freq + " " + step_size);
        short steps = (short) Math.round((stop_freq-start_freq)/step_size);
        _steps = (short) (steps + 1);
        gain = new double[_steps];
        phase = new double[_steps];
        int FTW_step = (int) (Math.round(step_size/CLK_freq*Math.pow(2, 32)));
        int FTW_start = (int) (Math.round(start_freq/CLK_freq*Math.pow(2, 32)));
        WriterThread wt = new WriterThread(mConnectThread.mmOutStream, steps, FTW_step, FTW_start);
        wt.start(); 
        start.setEnabled(false);
        NextBtn.setEnabled(true);
        NextBtn.setImageResource(R.drawable.next_enabled);
        //Display state in "status" textview
        output.setText("Collecting Data...");

    }catch (Exception e){
        e.printStackTrace();
        output.setText("Please Enter Sweep Parameters");

    }
}

在主活动中调用的方法以启动结果活动度:

    public void graphData() {
    //Creat X-axis array then pass it to Results and interleave with gain and phase
    X_axis = new double[_steps];
    X_axis[0] = start_freq;
    for (int i=1; i<_steps; i++) {
        X_axis[i] = X_axis[i-1] + step_size;
    }
    //start Results activity after button is pressed to display graph
    Intent intent = new Intent(this, Results.class);
    intent.putExtra("gainData", gain);
    intent.putExtra("phaseData", phase);
    intent.putExtra("Xaxis", X_axis);
    intent.putExtra("Battery Voltage", BatVolt);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);

    startActivity(intent);
    start.setEnabled(true);
}

结果活动中的START方法:

    public void start_sweep2 (View view) {
    MainActivity.start_sweep(view);
    finish();
}

2 个答案:

答案 0 :(得分:0)

将MainActivity(如上下文)传递给ResultsActivity,以便它调用前一个屏幕的扫描方法,而不仅仅是来自新MainActivity的扫描方法(现在正在发生的事情)

答案 1 :(得分:0)

1:根本没有使用静态函数的问题,但是这个函数应该返回一些数据,这些数据可以用来更新活动内部的视图,不要在静态函数中传递视图。

2:在任何这些活动中或在单独的Class中编写静态函数,并使用类名直接调用它,并使用函数的结果更新您的视图。