0

私はいくつかの問題を抱えており、問題について調査しましたが、役に立ちませんでした。

フラグメントのページャー ビューで作成されたテンプレートである Main.java クラスがあります。

独自のフラグメントを返すようになった getItem() メソッドを除いて、どのような方法でも変更しませんでした。

私のフラグメント A は加速度計データを収集し、最後の 120 レコードを ArrayList に保存しています。また、フラグメント B からアクセスしたい Series オブジェクトを含むグラフ プロットもあります。

これは私がやりたいことです:

フラグメント B では、ユーザーは「データの記録」ボタンを押します

これにより、フラグメント A のブール値フィールド「recordingOn」が true に変更されます

現在、fragmentA の onSensorChange メソッドでは、「recordingOn」をチェックした後、true の場合、フラグメント B のフィールドである ArrayList にデータを渡します。

これらのフィールドにアクセスするにはどうすればよいですか?

4

3 に答える 3

1

フラグメント呼び出しから

Fragment frag = getActivity().getFragmentManager()..findFragmentByTag("タグを見つけるフラグメント");

于 2013-02-25T15:05:39.867 に答える
1

Greensy の回答は有効なオプションです (私は彼に賛成しました) が、フラグメント間の DataPassing をあまり行わないようにして、Activity をすべてのマネージャーにすることもできます。

そのために、フラグメントにパブリック メソッドとインターフェイスを作成し、アクティビティにインターフェイスを実装させる/強制することができます。

簡単な例:

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

FragA では、そのメソッドを作成する必要があります。

 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());
      }
 }

それは理にかなっていますか?

于 2013-02-25T15:37:41.300 に答える
0

それを行う方法は、独自のApplication クラスArrayListを使用してそこに保存することです

取得した場合、アプリケーションの任意の場所でアクセスできますContext

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

ArrayListすべてのアプリケーションの実行中に生きているため、このソリューションには注意してください

于 2013-02-25T15:05:50.487 に答える