onCreate在android中的片段中多次调用

时间:2013-07-31 14:14:20

标签: android

我的活动中有一个ListView。在点击列表项时,它会调用另一个活动。在该活动中,我实现了ViewPager和片段。

当它第一次加载onResume()时,onCreate()和onCreateView()方法被调用两次,如果我点击第一个列表项。 (即它加载第一个和第二个片段视图) 当我点击除了第一个之外的任何其他List片段然后它调用onResume(),onCreate()和onCreateView()方法三次(即它加载上一个和后一个并单击视图)

这是完全没问题,但我有谷歌分析代码,我必须只跟踪当前页面,以便我可以将此代码加载到当前页面

我的问题是我的googleAnalytics代码第一次有三到两页,即使用户没有通过这些页面如何避免这种情况?

My code is as below for fragment 


    public class MainListActivity extends Activity{
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.v(TAG, "onCreate()");
    CustomFragmentPagerAdapter adapter = new CustomFragmentPagerAdapter();
    viewPager.setAdapter(adapter);


    }
    }

//code for fragment adapter 

    public class CustomFragmentPagerAdapter extends FragmentPagerAdapter {
    public CustomFragmentPagerAdapter(FragmentManager fm) {
            super(fm);

        }
    @Override
        public Fragment getItem(int pos) {
            CustomFragment customFragment = new CustomFragment();
            arrayList.add(customFragment);
            return customFragment;


    }




    @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return arrayList.size();
        }

    }


//code for fragment

public class CustomFragment extends Fragment{
public CustomFragment() {
        super();

    }
@Override
    public void onResume() {
        super.onResume();
        Log.v(TAG, "onCreate -Resume");
    }
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Log.v(TAG, "onCreate");
    }
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
        super.onCreateView(inflater, container, savedInstanceState);
        Log.v(TAG, "onCreateView");
return myAnyView;

}
}

1 个答案:

答案 0 :(得分:0)

问题是为所有片段调用了onResume()方法,包括不可见的片段。 检查gorn的答案: How to determine when Fragment becomes visible in ViewPager

你必须覆盖

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser) {
        // Your logic
    }

并在那里做你的逻辑。