Надеюсь, вы будете мягки ко мне, так как я новичок в программировании на Android.
Я работаю над проектом, где мне нужно 2 панели навигации.Для начала я добавил шаблон панели навигации, где я могу получить к нему доступ, проводя слева направо.Панель навигации работает, и я могу изменить фрагмент в зависимости от того, какой элемент я нажимаю на панели навигации.
Панель навигации по шаблону
Но тогда мне также понадобится еще одна панель навигации внизу экрана.Панель навигации, которая всегда видна.
Нижняя панель навигации
Макет такой, каким он должен быть, из того, что я вижу в коде, но когда явведите его в onNavigationItemSelected, сделанный из шаблона, ничего не происходит, когда я нажимаю на элементы в нижней панели навигации.
@RequiresApi(api = Build.VERSION_CODES.M)
@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_startside) {
// Handle the startside
Toast.makeText( this, "Startside", Toast.LENGTH_SHORT ).show();
//telefonSensor();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new StartsideFragment() );
ft.commit();
// onImageGalleryClicked();
} else if (id == R.id.bot_home) {
Toast.makeText( this, "Startside", Toast.LENGTH_SHORT ).show();
//telefonSensor();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new StartsideFragment() );
ft.commit();
} else if (id == R.id.nav_projektkonfiguration) {
Toast.makeText( this, "Projekt Konfiguration", Toast.LENGTH_SHORT ).show();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new ProjektKonfigurationFragment() );
ft.commit();
} else if (id == R.id.nav_tabel) {
Toast.makeText( this, "Data Tabel", Toast.LENGTH_SHORT ).show();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new DataTabelFragment() );
ft.commit();
//idFrag = (TextView) findViewById( R.id.idTX );
//idFrag.setText("Hej");
System.out.println( "DET ER HER DU SKAL KIGGE LIGE NU YUSUF" );
} else if (id == R.id.bot_dashboard) {
Toast.makeText( this, "Data Tabel", Toast.LENGTH_SHORT ).show();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new DataTabelFragment() );
ft.commit();
//idFrag = (TextView) findViewById( R.id.idTX );
//idFrag.setText("Hej");
System.out.println( "DET ER HER DU SKAL KIGGE LIGE NU YUSUF" );
} else if (id == R.id.nav_plot) {
Toast.makeText( this, "Data Plot", Toast.LENGTH_SHORT ).show();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new DataPlotFragment() );
ft.commit();
} else if (id == R.id.nav_sensoroversigt) {
Toast.makeText( this, "Sensor Oversigt", Toast.LENGTH_SHORT ).show();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new SensorOversigtFragment() );
ft.commit();
} else if (id == R.id.nav_registrersensor) {
Toast.makeText( this, "Tilføj Sensor", Toast.LENGTH_SHORT ).show();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new TilfojSensorFragment() );
ft.commit();
} else if (id == R.id.nav_kontakt) {
Toast.makeText( this, "Kontakt os her", Toast.LENGTH_SHORT ).show();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new KontaktFragment() );
ft.commit();
} else if (id == R.id.bot_kontakt) {
Toast.makeText( this, "Kontakt os her", Toast.LENGTH_SHORT ).show();
android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, new KontaktFragment() );
ft.commit();
} else if (id == R.id.nav_logud) {
firebaseAuth.getInstance().signOut();
Toast.makeText( this, "You're succesfully logged out", Toast.LENGTH_SHORT ).show();
Intent intent = new Intent( this, LoginActivity.class );
startActivity( intent );
// login();
}
DrawerLayout drawer = (DrawerLayout) findViewById( R.id.drawer_layout );
drawer.closeDrawer( GravityCompat.START );
return true;
}
- bot_home
- bot_dashboard
- bot_kontakt
Над идентификаторами с нижней панели навигации.Вопрос, конечно, в том, как мне кодировать, чтобы, когда я нажимал на эти элементы в нижней панели навигации, тогда менялся фрагмент.Должен ли я кодировать новый "onNavigationItemSelected".Я не ожидаю, что это ответ.Я надеюсь, что у вас есть ответ!
Заранее спасибо!
* ОБНОВЛЕНИЕ *
в моем onCreate у меня есть это:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate( savedInstanceState );
onCreate2();
final android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
BottomNavigationView mBottomNav = (BottomNavigationView) findViewById( R.id.nav_bot );
mBottomNav.setOnNavigationItemSelectedListener( new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.bot_home:
//Toast.makeText( this, "Startside", Toast.LENGTH_SHORT ).show();
//telefonSensor();
fragment = new StartsideFragment();
/*ft.replace( R.id.flMain, new StartsideFragment() );
ft.commit();*/
break;
case R.id.bot_dashboard:
//Toast.makeText( this, "Startside", Toast.LENGTH_SHORT ).show();
//telefonSensor();
//android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
fragment = new DataTabelFragment();
//ft.replace( R.id.flMain, new DataTabelFragment() );
//ft.commit();
//fragment = new DataTabelFragment();
break;
case R.id.bot_kontakt:
//Toast.makeText( this, "Startside", Toast.LENGTH_SHORT ).show();
//telefonSensor();
//android.support.v4.app.FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
/*ft.replace( R.id.flMain, new KontaktFragment() );
ft.commit();*/
break;
}
if (fragment != null) {
//FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace( R.id.flMain, fragment );
ft.commit();
}
return true;
}
} );
}
но потом яможно использовать только нижнюю панель навигации, прежде чем она выйдет из строя
LogCat:
09-24 14:57:47.304 2954-2954/com.example.yusuf.cxweb E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.yusuf.cxweb, PID: 2954
java.lang.IllegalStateException: commit already called
at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:666)
at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:634)
at com.example.yusuf.cxweb.MainActivity$1.onNavigationItemSelected(MainActivity.java:360)
at android.support.design.widget.BottomNavigationView$1.onMenuItemSelected(BottomNavigationView.java:182)
at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:822)
at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:171)
at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:973)
at android.support.design.internal.BottomNavigationMenuView$1.onClick(BottomNavigationMenuView.java:95)
at android.view.View.performClick(View.java:6294)
at android.view.View$PerformClick.run(View.java:24770)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6494)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)