我有一个ViewPager
,其中包含两个Fragments
,我在FragmentActivity
的onCreate
中实例化了它们。
private List<Fragment> fragments = new Vector<Fragment>();
fragments.add(Fragment.instantiate(this,Frag_1.class.getName()));
fragments.add(Fragment.instantiate(this,Frag_2.class.getName()));
this.vPagerAdapter = new Adapt(super.getSupportFragmentManager(),fragments);
vPager = (ViewPager) super.findViewById(R.id.pager);
vPager.setAdapter(vPagerAdapter);
我的第二个 Fragment
里面有一个方法,我会调用这个方法来更新我的 ListView
- refreshList()
:
public class Frag_2 extends Fragment {
private ListView list;
private ArrayList<data> data;
private boolean firstCreation=true;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setRetainInstance(false);
}
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
}
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout, container, false);
list = (ListView) view.findViewById(R.id.lst);
//this.setRetainInstance(true);
return view;
}
public void refreshList(ArrayList <data> data){
if(data!=null){
ArrayAdapter<data> adapter = new Item_data_adapter(getActivity(),data);
list.setAdapter(adapter);}
}
}
从我的FragmentActivity
中调用
//Something
Frag_2 fr = (Frag_2) vPagerAdapter.getItem(1);
if (fr.getView() != null) {
fr.refreshList(data);
}
直到我改变屏幕方向之前,它都很好用。如果我说错了,请纠正我,但我搜索了几个小时,没有找到解决方案或好的解释。
FragmentActivity
只创建一次,而 Fragments
附加到它上面,但是 Fragments
会在配置更改时重新创建。现在,当方向改变时,我无法从 onCreate
中获取 View
,因此当我尝试从 Fragment
中获取 View
时,它返回 null,并且我的 refreshList()
方法不被调用。我该怎么办?
FragmentManager
或其它地方存在漏洞,因为我们都遇到了这个问题。 - adneal