我遇到了一些麻烦,我已经对这个问题进行了研究,但这对我没有帮助。
我有一个Main.java类,它是模板的碎片页面视图。
我没有以任何方式修改它,除了getItem()方法,它现在返回我自己的片段。
我的片段A正在收集加速度计数据,在ArrayList中保存最后120条记录。 它还有图形图,包含Series对象,我想从片段B中访问它。
这就是我想要做的事情:
在片段B中,用户按下“记录数据”按钮
这导致片段A布尔字段“recordingOn”变为true
现在在fragmentA onSensorChange方法中,在检查“recordingOn”之后,如果它是真的,它会将数据传递给作为片段B中的字段的ArrayList
如何访问这些字段?
答案 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
将处于活动状态