我有两个名为 Main 和 Results 的活动。在主体部分,我有一个 START 按钮,它将用户输入的数据发送到蓝牙设备,从 BT 设备读回测量数据,处理数据,然后在结果活动中绘制它。在结果活动中,我希望有另一个开始按钮来执行完全相同的功能,这样用户就不必不断切换屏幕来进行另一次测量。我将 Main 活动中的 START 按钮设为静态,因此我可以从 Results 活动中调用 if。这似乎有效,但每次再次按下 START 按钮时,它都会继续打开更多结果活动。每次按下结果活动中的开始按钮时,我都尝试通过调用 finish() 来解决此问题。这行得通,但是会导致屏幕短暂地翻转回主要活动,然后在再次收集所有数据后返回结果活动。我想只停留在结果活动上,并简单地查看图表的变化。
1.) 我不认为拥有静态函数/变量是一种好习惯。有没有更好的方法从另一个活动中调用这个 START 方法?
2.) 关于如何关闭结果活动以避免重复但防止屏幕在活动之间快速来回切换的任何建议。
Main Activity 的 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");
}
}
在 Main Activity 中调用以启动 Results Activity 的方法:
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();
}