访问其他片段数据

时间:2013-02-25 14:57:55

标签: java android android-fragments

我遇到了一些麻烦,我已经对这个问题进行了研究,但这对我没有帮助。

我有一个Main.java类,它是模板的碎片页面视图。

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

我的片段A正在收集加速度计数据,在ArrayList中保存最后120条记录。 它还有图形图,包含Series对象,我想从片段B中访问它。

这就是我想要做的事情:

在片段B中,用户按下“记录数据”按钮

这导致片段A布尔字段“recordingOn”变为true

现在在fragmentA onSensorChange方法中,在检查“recordingOn”之后,如果它是真的,它会将数据传递给作为片段B中的字段的ArrayList

如何访问这些字段?

3 个答案:

答案 0 :(得分:1)

来自片段调用

Fragment frag = getActivity()。getFragmentManager().. findFragmentByTag(“fragment to find tag”);

答案 1 :(得分: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());
      }
 }

这有意义吗?

答案 2 :(得分:0)

这样做的方法是使用您自己的Application class并将ArrayList存储在那里

如果您有Context

,则可以在应用程序的任何位置访问它
ArrayList<AccelerometerData> myAccelerometerData = ((MyApplication) mContext.getApplicationContext()).getAccelerometerData();

请注意此解决方案,因为在所有应用程序运行期间ArrayList将处于活动状态