1

嗨,我正在使用片段制作标签。这是我生成标签的代码:

   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() 方法的调用。但我不想每次都加载数据。怎样才能做到这一点?

4

1 回答 1

-1

仅当列表为空或已更新时,才使用片段的 onCreate 方法来访问 web 服务并设置适配器...现在您在 OnCreateView 中执行此操作,每次您选择选项卡时都会调用该方法。

于 2013-09-03T05:21:02.450 回答