嗨,我正在使用片段制作标签。这是我生成标签的代码:
private static void addTab(QatarAuctionHomeTabActivity activity, TabHost tabHost, TabHost.TabSpec tabSpec, TabInfo tabInfo) {
// Attach a Tab view factory to the spec
tabSpec.setContent(activity.new TabFactory(activity));
String tag = tabSpec.getTag();
tabInfo.fragment = activity.getSupportFragmentManager().findFragmentByTag(tag);
if (tabInfo.fragment != null && !tabInfo.fragment.isDetached()) {
FragmentTransaction ft = activity.getSupportFragmentManager().beginTransaction();
ft.detach(tabInfo.fragment);
ft.commit();
activity.getSupportFragmentManager().executePendingTransactions();
}
tabHost.addTab(tabSpec);
}
这是我的 onTabChanged() 监听器
public void onTabChanged(String tag) {
// TODO Auto-generated method stub
TabInfo newTab = this.mapTabInfo.get(tag);
if (mLastTab != newTab) {
FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
if (mLastTab != null) {
if (mLastTab.fragment != null) {
ft.detach(mLastTab.fragment);
}
}
if (newTab != null) {
if (newTab.fragment == null) {
newTab.fragment = Fragment.instantiate(this,
newTab.clss.getName(), newTab.args);
ft.add(R.id.realtabcontent, newTab.fragment, newTab.tag);
} else {
ft.attach(newTab.fragment);
}
}
mLastTab = newTab;
// ft.addToBackStack(null);
ft.commit();
this.getSupportFragmentManager().executePendingTransactions();
}
}
我正在添加一个带有 Gridview 的片段(从 Web 获取数据以加载网格)。但我的问题是,当我在选项卡之间导航并每次加载数据时再次转到网格选项卡时。每次都会调用 onCreateview() 并加载数据。这是网格视图的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.product_list_layout, container,
false);
Log.e("oncreateview", "Aise");
initiateServerParameters();
getUserDataFromPreference();
initialize();
setUpGrid();
requestDataFromWeb();
return view;
}
我知道 ft.attach(newTab.fragment) 方法再次重新创建片段的视图,这会导致 oncreateview() 方法的调用。但我不想每次都加载数据。怎样才能做到这一点?