2013-02-25 78 views
0

我遇到了一些麻煩,我已經完成了對這個問題的研究,但它沒有幫助我。訪問其他片段數據

我有一個Main.java類,它是模板製作頁面查看片段。

我沒有以任何方式修改它,除了getItem()方法現在返回我自己的片段。

我的片段A正在收集加速計數據,保存ArrayList中的最後120條記錄。 它還具有圖形繪製,與系列的對象,這是我想從片段B.訪問

這就是我想做的事:

在B片段用戶按下按鈕「記錄數據」

這導致片段A布爾型字段「recordingOn」改變爲true

現在fragmentA onSensorChange方法,檢查「recordingOn」之後,如果這是真的,將數據傳遞給一個ArrayList即在B片段

一個字段

如何訪問這些字段?

回答

1

從片段呼叫

片段FRAG = getActivity()getFragmentManager().. findFragmentByTag( 「片段找到標籤」)。

0

一個辦法做到這一點是使用自己的Application class和存儲您在那裏

ArrayList

然後,您可以訪問它在應用程序的任何時候,如果你有一個Context

ArrayList<AccelerometerData> myAccelerometerData = ((MyApplication) mContext.getApplicationContext()).getAccelerometerData(); 

請關注此解決方案,因爲您的ArrayList將在所有應用程序運行期間保持活躍狀態​​

1

綠色答案是一個有效的選項(我向他投票),但您也可以不要這樣做muc h片段之間的數據通過並讓Activity成爲所有這些的管理器。

爲此,您可以在片段中創建公共方法和接口,並讓/強制活動實現接口。

簡單的例子:

public class Act extends Activity implements OnClickListener{ 
    @Override 
    OnClick(View v){ 
     if(v.getId()==R.id.btn_recordData){ 
      fragA.startRecording(); 
     } 
    } 
} 

然後弗拉加必須創建一個方法:

public class FragA extends Fragment{ 
    private boolean isRecording 
    public void startRecording(){ isRecording = true; // also init the sensor stuff } 
    public void stopRecording() { isRecording = false; // also stop the sensor stuff } 
} 

然後FragB您可以:

public class FragB extends Fragment{ 
     onCreateView(...){ 
      // initialise all the views and find the button, let's call it Button btn; 
      btn.setOnClickListener((OnClickListener)getActivity()); 
     } 
} 

這是否合理?