![](/img/trans.png)
[英]How to switch between Fragments in default Android Studio Navigation Drawer
[英]How to Switch Fragments by Navigation Drawer (new support library by android)?
我正在使用android應用程序,在其中我Navigation drawer
給出的類別切換片段。 當我的活動正在擴展AppcompatActivity
時, navigation drawer
運行良好。 現在我已經創建了一個片段HomeFragment extends Fragment
並導入了support.v4.Fragment
很好地添加了onCreate
和onCreateView
方法。 現在要應用片段我的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
以下是我想為您的查詢做出的一些貢獻:
您確定要.add
從導航抽屜中選擇的片段嗎? 請記住,有一個可用的.replace
功能,它將容器中的當前Fragment與新的,指定的交換。
在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.