Я хочу создать Activity, который показывает своего рода меню, через которое может пройти пользователь. Щелчком по элементу отображается новый экран, предоставляющий пользователю больше возможностей (наподобие мастера).
Я хотел реализовать это с помощью Fragments, но у меня это не работает.
Сейчас у меня есть:
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:id="@+id/main_fragmentcontainer" >
<fragment
android:id="@+id/mainmenufragment"
android:name="com.myapp.MainMenuFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<fragment
android:id="@+id/secondmenufragment"
android:name="com.myapp.SecondMenuFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
MainMenuFragment с OnClickListener:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.mainmenu, container, false);
setupButton(view);
return view;
}
/* Button setup code omitted */
@Override
public void onClick(View v) {
SherlockFragment secondRunMenuFragment = (SherlockFragment) getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.secondmenufragment);
FragmentTransaction transaction = getSherlockActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, secondMenuFragment); //also crashes with R.id.main_fragmentcontainer
transaction.addToBackStack(null);
transaction.commit();
}
Теперь, когда я нажимаю кнопку, приложение вылетает с этим логарифмом:
06-27 01:45:26.309: E/AndroidRuntime(8747): java.lang.IllegalStateException: невозможно изменить идентификатор контейнера фрагмента SecondMenuFragment{405e2a70 #1 id=0x7f060029}: был 2131099689, теперь 2131099687
06-27 01:45:26.309: E/AndroidRuntime(8747): на android.support.v4.app.BackStackRecord.doAddOp(Неизвестный источник)
06–27 01:45:26.309: E/AndroidRuntime(8747): на android .support.v4.app.BackStackRecord.replace(неизвестный источник)
06-27 01:45:26.309: E/AndroidRuntime(8747): в android.support.v4.app.BackStackRecord.replace(неизвестный источник)< br> 06-27 01:45:26.309: E/AndroidRuntime(8747): в com.myapp.MainMenuFragment$MyButtonOnClickListener.onClick(MainMenuFragment.java:52)
Что я делаю неправильно?
<fragment>? - person CommonsWare   schedule 27.06.2012Fragmentпоказывает первое меню с кнопками1,2и3. ВторойFragmentпоказывает второе меню с кнопками1.1,1.2и1.3. В планах добавить третьюFragmentс кнопками2.1,2.2и2.3. Или я подхожу ко всему этому неправильно? - person nhaarman   schedule 27.06.2012