2013-08-07 109 views
1

我有兩個名爲Main和Results的活動。主要我有一個START按鈕,可將用戶輸入的數據發送到藍牙設備,從BT設備讀回測量數據,處理數據,然後在結果活動中繪製圖形。在結果活動中,我希望有另一個START按鈕來執行完全相同的功能,因此用戶不必保持切換屏幕進行另一次測量。我將主要活動中的START按鈕設置爲靜態,以便可以從Results活動調用if。這似乎工作,但它每次再次按下START按鈕時都會繼續打開更多結果活動。我試圖通過每次按下結果活動中的START按鈕時調用finish()來解決這個問題。這會起作用,但會導致屏幕短暫地回到主要活動,然後一旦再次收集所有數據,就會返回結果活動。我想繼續留在結果活動中,只看圖表的變化。如何從另一個活動調用onClick方法的按鈕

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"); 

    } 
} 

方法稱爲在主要活動開始結果Actiivity:從結果活動

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

傳遞在MainActivity (如上下文)添加到ResultsActivity中,以便調用掃描方法而不僅僅是一個新的MainActivity的掃描方法(這就是現在發生的事情)

0

1:沒有使用靜態函數的probelm,但是這個函數應該返回一些可以使用的數據至於更新活動內的視圖,不要在靜態函數內部傳遞視圖。

2:將靜態函數寫入這些活動中的任何一個或單獨的類中,並使用Class名稱直接調用它,並使用函數的結果更新您的視圖。

相關問題