为什么在使用getactivity()查找视图时有时会跳过在FragmentPagerAdapter中创建的片段?

时间:2014-11-20 10:47:39

标签: java android android-fragments android-viewpager fragmentpageradapter

我正在使用FragmentPagerAdapter创建片段A的多个实例。

我尝试了两种方法在fragement A中找到观点:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View v= inflater.inflate(R.layout.fragment_cat_table, container, false);
    title = (TextView) v.findViewById(R.id.cat_title);
    pagenum = (TextView) v.findViewById(R.id.page_number);
    title.setText(catName);
    pagenum.setText("page #"+String.valueOf(catIndex));
    return v;
}

上面的代码工作正常,视图来自inflater。 但第二种方式:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    title = (TextView) getActivity().findViewById(R.id.cat_title);
    pagenum = (TextView) getActivity().findViewById(R.id.page_number);
    title.setText(catName);
    pagenum.setText("page #"+String.valueOf(catIndex));
}

通过这种方式,我使用getactivity()来查找视图。 奇怪的是:如果我有2个页面有2个片段A的实例:片段A_0,片段A_1,那么片段A_0将不会显示,片段A_1将显示在第0页。第1页将包含原始片段A:片段中的所有textview(title和pagenum)都未设置

我很好奇为什么会这样。

1 个答案:

答案 0 :(得分:0)

稍微考虑一下......我想通了。    pageadapter将提前创建片段,以便在片段在屏幕上之前调用onActivityCreated。因此,如果我在findviewbyId()中执行onActivityCreated,则可能会在当前正在显示的其他页面/片段中找到该视图并对其进行修改