【发布时间】:2012-09-08 07:51:20
【问题描述】:
我有一个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中存在错误,或者考虑到我们都遇到了这种情况。 -
你的 xml 布局怎么样?这对于在活动布局中声明的静态片段来说不是问题,但对于动态片段来说不是这样
-
@zipc @DLock 和我都在使用
ViewPager。在这种情况下,您不会在 XML 中写入Fragments。 -
我遇到了同样的问题。这个问题是3年前提出的,对此有更新吗?我正在考虑将我的 Activity 修复为肖像,因为我厌倦了 Android 并且它是未记录的片段使用。我还没有在这方面找到任何东西,即使我保留了我的片段,Android 仍然会重新创建视图,然后再次附加 Activity,但在翻转页面后片段会将 isAlive() 设为 false。对我来说没有任何意义。
标签: android android-fragments android-viewpager android-fragmentactivity