我已经使用java添加了片段。
当我以纵向模式打开应用程序时,它可以正常工作。
如果我旋转片段就会消失。
但是,如果我关闭应用,然后旋转手机,然后再次打开应用,它就能正常工作。
我有两种不同的布局,一种用于纵向模式,另一种用于横向模式, 两者名称相同,我在“布局”文件夹中有纵向布局,在“布局 - 土地”文件夹中有横向布局。
似乎我忘了什么,真诚地说我是Android开发的新手。活动:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ListFragment frag = new ListFragment();
setContentView(R.layout.layout_main);
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.LIST_LAYOUT,frag,"LIST");
transaction.commit();
}
片段:
public class ListFragment extends Fragment implements AdapterView.OnItemClickListener{
ListView List;
Communicator communicator;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//return super.onCreateView(inflater, container, savedInstanceState);
return inflater.inflate(R.layout.mlistfragment,container,false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
communicator = (Communicator) getActivity();
List = (ListView) getActivity().findViewById(R.id.listView);
ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(),R.array.StrListButtons,android.R.layout.simple_list_item_1);
List.setAdapter(adapter);
List.setOnItemClickListener(this);
}
答案 0 :(得分:15)
每次创建Fragment
时,您实际上不需要添加Activity
; FragmentManager
自动维护它们。您应该在FragmentTransaction
检查中包装执行if (savedInstanceState == null)
的代码,以便仅在第一次创建Activity
时执行。例如:
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
.add(R.id.list_layout, new ListFragment(), "LIST")
.commit();
}
答案 1 :(得分:0)
通常在方向更改后重新创建活动。 您可以尝试使用onSaveInstanceState()方法来保存数据。
请参阅此链接了解更多详情。
http://developer.android.com/guide/components/activities.html#ConfigurationChanges
答案 2 :(得分:-2)
您好您可以尝试实现onResume()并调用 来自那里的代码块
FragmentManager manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.LIST_LAYOUT,frag,"LIST");
transaction.commit();
还覆盖onsaveinstancestate()
答案 3 :(得分:-3)
尝试使用setRetainInstance(true);在你的片段的onCreate方法中。