2015-06-28 3 views
3

Я пишу приложение Android, используя Navigation Drawer. Я хочу изменить текущий fragment при нажатии кнопки.Изменение фрагмента смены ящика программно

public void btnClick(){ 
    ... 
    changeFragment(); 
    ... 
} 

private void changeFragment() { 
    Fragment home = new Home(); 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.navigation_drawer, home); 
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

Я получаю следующее сообщение об ошибке в LogCat:

FATAL EXCEPTION: main 
java.lang.UnsupportedOpetaionException: addView(View) is not supported in AdapterView 

Home Мой фрагмент загружается и отображается в самом начале, а после переезда в другой фрагмент и нажав кнопку Я хочу, чтобы автоматически вернуться к фрагменту Home.

Как я могу это сделать?

EDIT: Полный журнал ошибок

06-28 21:19:26.262: E/AndroidRuntime(5023): FATAL EXCEPTION: main 
06-28 21:19:26.262: E/AndroidRuntime(5023): Process: com.susu.appclient, PID: 5023 
06-28 21:19:26.262: E/AndroidRuntime(5023):  java.lang.UnsupportedOperationException: addView(View) is not supported in AdapterView 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.widget.AdapterView.addView(AdapterView.java:461) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:968) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1136) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1499) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:456) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.os.Handler.handleCallback(Handler.java:739) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.os.Handler.dispatchMessage(Handler.java:95) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.os.Looper.loop(Looper.java:135) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at android.app.ActivityThread.main(ActivityThread.java:5254) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at java.lang.reflect.Method.invoke(Native Method) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at java.lang.reflect.Method.invoke(Method.java:372) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
06-28 21:19:26.262: E/AndroidRuntime(5023):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
+0

Где код, где вы использовали 'addView (View)'. – Pooja

+0

Это код для изменения фрагмента. С 'changeFragment()' в качестве комментария приложение работает бегло. Но поскольку я хочу изменить фрагмент, я использую код, написанный выше, и мое приложение разбилось с ошибкой, о которой я упомянул в полном «LogCat», который я редактировал. – itaied

ответ

1

Если я понимаю, вы пытаетесь изменить фрагмент ниже панели навигации, а не саму навигацию ящик (который является гораздо более сложным).

В этой строке:

ft.replace(R.id.navigation_drawer, home); 

Вы должны заменить R.id.navigation_drawer для FragmentLayout, который должен быть на вашем activitylayout.xml.

Что-то вроде:

ft.replace(R.id.fragment_layout, home); 
+0

Спасибо, сработало! Нужно было вместо этого ввести идентификатор 'container'. Благодаря! – itaied

Смежные вопросы