簡體   English   中英

如何通過導航抽屜切換片段(Android的新支持庫)?

[英]How to Switch Fragments by Navigation Drawer (new support library by android)?

我正在使用android應用程序,在其中我Navigation drawer給出的類別切換片段。 當我的活動正在擴展AppcompatActivity時, navigation drawer運行良好。 現在我已經創建了一個片段HomeFragment extends Fragment並導入了support.v4.Fragment很好地添加了onCreateonCreateView方法。 現在要應用片段我的MainActivity必須擴展FragmentActivity,對嗎? 再往前走,所以MainActivity extends FragmentActivity ,最后我通過使用

FragmentManager fm = getSupportFragmentManager();
Fragment fragment = fm.findFragmentById(R.id.fragmentContainer);
if (fragment == null) {
    fragment = new HomeFragment();
    fm.beginTransaction()
    .add(R.id.fragmentContainer, fragment)
    .commit();
}

此代碼在我的開關盒中

我的開關盒如下

private void setupNavigationDrawerContent(NavigationView navigationView) {
    navigationView
            .setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(MenuItem menuItem) {
                    switch (menuItem.getItemId()) {
                    case R.id.home:
                        menuItem.setChecked(true);
                        FragmentManager fm = getSupportFragmentManager();
                        Fragment fragment = fm
                                .findFragmentById(R.id.fragmentContainer);
                        if (fragment == null) {
                            fragment = new HomeFragment();
                            fm.beginTransaction()
                                    .add(R.id.fragmentContainer, fragment)
                                    .commit();
                        }
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.current_event:
                        menuItem.setChecked(true);
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.college_events:
                        menuItem.setChecked(true);

                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.national_events:
                        menuItem.setChecked(true);
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.workshops:
                        menuItem.setChecked(true);
                        FragmentManager fm = getSupportFragmentManager();
                        Fragment fragment = fm
                                .findFragmentById(R.id.list_view_container);
                        if (fragment == null) {
                            fragment = new HomeFragment();
                            fm.beginTransaction()
                                    .add(R.id.list_view_container, fragment)
                                    .commit();
                            drawerLayout.closeDrawer(GravityCompat.START);
                            return true;
                        }
                    case R.id.trainings:
                        menuItem.setChecked(true);

                        Toast.makeText(
                                MainActivity.this,
                                "Launching "
                                        + menuItem.getTitle().toString(),
                                Toast.LENGTH_SHORT).show();
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.companies:
                        menuItem.setChecked(true);
                        Toast.makeText(MainActivity.this,
                                menuItem.getTitle().toString(),
                                Toast.LENGTH_SHORT).show();
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.talents:
                        menuItem.setChecked(true);
                        Toast.makeText(MainActivity.this,
                                menuItem.getTitle().toString(),
                                Toast.LENGTH_SHORT).show();
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.games:
                        menuItem.setChecked(true);
                        Toast.makeText(MainActivity.this,
                                menuItem.getTitle().toString(),
                                Toast.LENGTH_SHORT).show();
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.submission:
                        menuItem.setChecked(true);
                        Toast.makeText(MainActivity.this,
                                menuItem.getTitle().toString(),
                                Toast.LENGTH_SHORT).show();
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    case R.id.about:
                        menuItem.setChecked(true);
                        Toast.makeText(MainActivity.this,
                                menuItem.getTitle().toString(),
                                Toast.LENGTH_SHORT).show();
                        drawerLayout.closeDrawer(GravityCompat.START);
                        return true;
                    }
                    return true;
                }
            });
}

我在活動的XML中使用FrameLayout 一切都很好,因為當我運行此應用程序時似乎出了什么問題,請問我,然后navigaiondrawer正常工作,但是當我嘗試單擊家庭類別應用程序時崩潰了。請幫幫我

這是錯誤日志:

`91404:07:35.05211311131/com.dushyant30suthar.gitseventD/dalvikvmLateenabling CheckJNI
09-14 04:07:35.120    1131-1131/com.dushyant30suthar.gitseventW/dalvikvm:VFY: unable to find class referenced in signature (Landroid/view/SearchEvent;)
09-14 04:07:35.120    1131-1131/com.dushyant30suthar.gitsevent I/dalvikvmCould not find method android.view.Window$Callback.onSearchRequested, referenced from method android.support.v7.internal.view.WindowCallbackWrapper.onSearchRequested
09-14 04:07:35.120    1131-1131/com.dushyant30suthar.gitsevent W/dalvikvm VFY: unable to resolve interface method 17391: Landroid/view/Window$Callback;.onSearchRequested (Landroid/view/SearchEvent;)Z
09-14 04:07:35.120    1131-1131/com.dushyant30suthar.gitsevent D/dalvikvm VFY: replacing opcode 0x72 at 0x0002
09-14 04:07:35.120    1131-1131/com.dushyant30suthar.gitsevent I/dalvikvm Could not find method android.view.Window$Callback.onWindowStartingActionMode, referenced from     method android.support.v7.internal.view.WindowCallbackWrapper.onWindowStartingActionMode
09-14 04:07:35.120    1131-1131/com.dushyant30suthar.gitsevent W/dalvikvm VFY: unable to resolve interface method 17395: Landroid/view/Window$Callback;.onWindowStartingActionMode (Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;
09-14 04:07:35.120    1131-1131/com.dushyant30suthar.gitsevent D/dalvikvm VFY: replacing opcode 0x72 at 0x0002
09-14 04:07:35.136    1131-1131/com.dushyant30suthar.gitsevent I/AppCompatViewInflater﹕ app:theme is now deprecated. Please move to using android:theme instead.
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent I/dalvikvm Could not find method android.view.ViewGroup.onRtlPropertiesChanged, referenced from method android.support.v7.widget.Toolbar.onRtlPropertiesChanged
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent W/dalvikvm VFY: unable to resolve virtual method 17288: Landroid/view/ViewGroup;.onRtlPropertiesChanged (I)V
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent D/dalvikvm VFY: replacing opcode 0x6f at 0x0007
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent I/dalvikvm Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent W/dalvikvm﹕ VFY: unable to resolve virtual method 415: Landroid/content/res/TypedArray;.getChangingConfigurations ()I
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent W/dalvikvm﹕ VFY: unable to resolve virtual method 437: Landroid/content/res/TypedArray;.getType (I)I
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002
09-14 04:07:35.152    1131-1131/com.dushyant30suthar.gitsevent I/AppCompatViewInflater﹕ app:theme is now deprecated. Please move to using android:theme instead.
09-14 04:07:35.200    1131-1133/com.dushyant30suthar.gitsevent D/dalvikvm﹕ GC_CONCURRENT freed 202K, 18% free 6189K/7495K, paused 13ms+13ms, total 40ms
09-14 04:07:35.236    1131-1131/com.dushyant30suthar.gitsevent D/dalvikvm﹕ GC_FOR_ALLOC freed 12K, 17% free 6246K/7495K, paused 3ms, total 3ms
09-14 04:07:35.236    1131-1131/com.dushyant30suthar.gitsevent I/dalvikvm-heap﹕ Grow heap (frag case) to 7.440MB for 330412-byte allocation
09-14 04:07:35.252    1131-1131/com.dushyant30suthar.gitsevent D/dalvikvm﹕ GC_FOR_ALLOC freed 1K, 17% free 6567K/7879K, paused 5ms, total 5ms
09-14 04:07:35.264    1131-1131/com.dushyant30suthar.gitsevent D/dalvikvm﹕ GC_FOR_ALLOC freed 1K, 17% free 6569K/7879K, paused 9ms, total 9ms
09-14 04:07:35.268    1131-1131/com.dushyant30suthar.gitsevent I/dalvikvm-heap﹕ Grow heap (frag case) to 8.107MB for 698908-byte allocation
09-14 04:07:35.276    1131-1133/com.dushyant30suthar.gitsevent D/dalvikvm﹕ GC_CONCURRENT freed <1K, 16% free 7251K/8583K, paused 1ms+1ms, total 6ms
09-14 04:07:35.404    1131-1131/com.dushyant30suthar.gitsevent D/libEGL﹕ loaded /system/lib/egl/libEGL_genymotion.so
09-14 04:07:35.404    1131-1131/com.dushyant30suthar.gitsevent D/﹕ HostConnection::get() New Host Connection established 0xb90102d8, tid 1131
09-14 04:07:35.440    1131-1131/com.dushyant30suthar.gitsevent D/libEGL﹕ loaded /system/lib/egl/libGLESv1_CM_genymotion.so
09-14 04:07:35.440    1131-1131/com.dushyant30suthar.gitsevent D/libEGL﹕ loaded /system/lib/egl/libGLESv2_genymotion.so
09-14 04:07:35.696    1131-1131/com.dushyant30suthar.gitsevent W/EGL_genymotion﹕ eglSurfaceAttrib not implemented
09-14 04:07:35.732    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ Enabling debug mode 0
09-14 04:07:35.896    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb90171f0): name, size, mSize = 2, 2304, 2304
09-14 04:07:35.948    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb902f068): name, size, mSize = 3, 1024, 3328
09-14 04:07:48.628    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb902a918): name, size, mSize = 6, 144, 3472
09-14 04:07:48.652    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb9031690): name, size, mSize = 8, 330400, 333872
09-14 04:07:48.664    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb9077e88): name, size, mSize = 9, 4, 333876
09-14 04:07:48.800    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb9006108): name, size, mSize = 15, 698896, 1032772
09-14 04:07:48.872    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb904a070): name, size, mSize = 17, 4096, 1036868
09-14 04:07:48.912    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb9022068): name, size, mSize = 18, 4096, 1040964
09-14 04:07:48.916    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb9044b10): name, size, mSize = 19, 4096, 1045060
09-14 04:07:48.916    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb9020018): name, size, mSize = 20, 4096, 1049156
09-14 04:07:48.920    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb901ec20): name, size, mSize = 21, 4096, 1053252
09-14 04:07:48.920    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb90364a8): name, size, mSize = 22, 4096, 1057348
09-14 04:07:48.924    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb900bcb8): name, size, mSize = 23, 4096, 1061444
09-14 04:07:48.924    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb9029c10): name, size, mSize = 24, 4096, 1065540
09-14 04:07:48.924    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb900b4d8): name, size, mSize = 25, 4096, 1069636
09-14 04:07:48.928    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb9012978): name, size, mSize = 26, 4096, 1073732
09-14 04:07:48.928    1131-1131/com.dushyant30suthar.gitsevent D/OpenGLRenderer﹕ TextureCache::get: create texture(0xb901f218): name, size, mSize = 27, 4096, 1077828
09-14 04:07:50.032    1131-1131/com.dushyant30suthar.gitsevent D/AndroidRuntime﹕ Shutting down VM
09-14 04:07:50.032    1131-1131/com.dushyant30suthar.gitsevent W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0xa62c8288)
09-14 04:07:50.032    1131-1131/com.dushyant30suthar.gitsevent E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.support.v4.app.SuperNotCalledException: Fragment HomeFragment{534ec534 #0 id=0x7f0d0067} did not call through to super.onCreate()
        at android.support.v4.app.Fragment.performCreate(Fragment.java:1941)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:988)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1207)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1572)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:493)
        at android.os.Handler.handleCallback(Handler.java:615)
        at android.os.Handler.dispatchMessage(Handler.java:92)
        at android.os.Looper.loop(Looper.java:137)
        at android.app.ActivityThread.main(ActivityThread.java:4745)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:511)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
        at dalvik.system.NativeStart.main(Native Method)
09-14 04:07:52.296    1131-1131/? I/Process﹕ Sending signal. PID: 1131 SIG: 9

以下是我想為您的查詢做出的一些貢獻:

  1. 您確定要.add從導航抽屜中選擇的片段嗎? 請記住,有一個可用的.replace功能,它將容器中的當前Fragment與新的,指定的交換。

  2. switch語句中,每次選擇“導航菜單項”時調用getSupportFragmentManager()似乎都有些冗余。 為什么不先調用管理器,並提供一個片段以便在選擇特定菜單項時進行交換?

借助Navigation Drawer切換片段是一項相當常見的任務,該任務可以通過網絡以多種方式進行教授。 尋求,您將找到!

祝好運!

使用replace代替add

Fragment fragment = new CrimeFragment();
FragmentManager fm = getFragmentManager();
                        fragmentManager.beginTransaction()
                                .replace(R.id.fragmentContainer, fragment)
                                .commit();

此行顯示錯誤:

09-14 04:07:50.032    1131-1131/com.dushyant30suthar.gitsevent E/AndroidRuntime﹕ FATAL EXCEPTION: main
    android.support.v4.app.SuperNotCalledException:
        Fragment HomeFragment{534ec534 #0 id=0x7f0d0067} did not call through to super.onCreate()

所以我認為原因在於HomeFragment中的onCreate 應該有super.onCreate

@override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstancestate); // make sure this line exists

    ...

}

檢查您的HomeFragment並確保onCreate super.onCreate

抱歉,打擾您了,但我得到的錯誤是我在HomeFragment中沒有提到super.onCreate(Bundle savedInstanceState),所以無論如何我還是得到了一些新的觀點,例如不需要擴展片段活動AppCompat太棒了,謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM