Ock*_*zor 8 android android-fragments
我有一些问题将数据从活动传递到其中的片段.我四处搜索,但没有找到适合我情况的答案.我有两个名为CurrentFragment.javaand的片段类HistoryFragment.java.我将它们初始化为Activity中的选项卡.
Tab tab = actionBar.newTab()
.setText(R.string.tab_current)
.setTabListener(new TaskitTabListener<CurrentFragment>(
this, "current", CurrentFragment.class));
actionBar.addTab(tab);
tab = actionBar.newTab()
.setText(R.string.tab_history)
.setTabListener(new TaskitTabListener<HistoryFragment>(
this, "history", HistoryFragment.class));
actionBar.addTab(tab);
Run Code Online (Sandbox Code Playgroud)
我被告知要setArguments在活动和getArguments片段中使用.但是在这种情况下如何在Activity中获取片段对象?我无法使用,getFragmentManager().findFragmentById()因为片段是以编程方式添加的.
另外,我发现一些帖子说我可能会getActivity()在片段中使用Activity来访问Activity容器中的数据,但对我来说它会一直返回null.有没有人有这方面的工作实例?
[编辑]我已经更新了我的答案,以便更好地回答您的问题.
您还可以通过标签检索片段getFragmentManager().findFragmentByTag("tag").但要小心,如果尚未查看选项卡,则片段将不存在.
CurrentFragment curFrag = (CurrentFragment)
getFragmentManager().findFragmentByTag("current");
if(curFrag == null) {
// The user hasn't viewed this tab yet
} else {
// Here's your data is a custom function you wrote to receive data as a fragment
curFrag.heresYourData(data)
}
Run Code Online (Sandbox Code Playgroud)
如果您希望片段从活动中提取数据,则您的活动将实现片段定义的接口.在onAttach(Activity activity)片段的生命周期函数中,您可以访问创建片段的活动,以便您可以将该活动转换为您定义的接口并进行函数调用.为此,将接口放在您的片段中(如果要在多个片段之间共享相同的接口,也可以将接口设置为自己的文件):
public interface DataPullingInterface {
public String getData();
}
Run Code Online (Sandbox Code Playgroud)
然后在您的活动中实现接口,如下所示:
public class MyActivity extends Activity implements DataPullingInterface {
// Your activity code here
public String getData() {
return "This is my data"
}
}
Run Code Online (Sandbox Code Playgroud)
最后,onAttach(Activity activity)在CurrentFragment 中的方法中,将您收到的活动强制转换为您创建的接口,以便调用这些函数.
private DataPullingInterface mHostInterface;
public void onAttach(Activity activity) {
super.onAttach(activity);
if(D) Log.d(TAG, "onAttach");
try {
mHostInterface = (DataPullingInterface) activity;
} catch(ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement DataPullingInterface");
}
String myData = mHostInterface.getData();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10691 次 |
| 最近记录: |