简体   繁体   English

导航抽屉以编程方式更改片段

[英]Navigation Drawer change fragment programmatically

I'm writing an Android app using the Navigation Drawer . 我正在使用Navigation Drawer编写Android应用程序。 I want to change the current fragment upon a button is clicked. 我想在单击按钮时更改当前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();
}

I'm receiving the following error in LogCat : 我在LogCat收到以下错误:

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

My Home fragment is loaded and displayed at the beginning, and after moving to another fragment and clicking a button I want to automatically return to the Home fragment. My Home片段在开始时加载并显示,在移动到另一个片段并单击按钮后,我想自动返回到Home片段。

How can I manage to do it? 我怎么能设法做到这一点?

EDIT: Full error log 编辑:完整的错误日志

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)

If i understand, you are trying to change the fragment below the navigation drawer, and not the navigation drawer itself (which is a lot more complex). 如果我理解,你试图改变导航抽屉下面的片段,而不是导航抽屉本身(这是更复杂的)。

In this line: 在这一行:

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

You must replace R.id.navigation_drawer for a FragmentLayout that should be on your activitylayout.xml. 您必须将R.id.navigation_drawer替换为应存在于activitylayout.xml上的FragmentLayout。

Something like: 就像是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM