我有两个名为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();
}
答案 0 :(得分:0)
将MainActivity(如上下文)传递给ResultsActivity,以便它调用前一个屏幕的扫描方法,而不仅仅是来自新MainActivity的扫描方法(现在正在发生的事情)
答案 1 :(得分:0)
1:根本没有使用静态函数的问题,但是这个函数应该返回一些数据,这些数据可以用来更新活动内部的视图,不要在静态函数中传递视图。
2:在任何这些活动中或在单独的Class中编写静态函数,并使用类名直接调用它,并使用函数的结果更新您的视图。