带外部按钮的底部导航活动

时间:2019-11-28 11:06:57

标签: android android-fragments

我正在使用Android Studio中的底部导航活动

enter image description here

设置完所有必需的底部标签后,我需要为一个片段添加附加按钮,但要在标签区域之外。而且只有在调用第二个片段时,该按钮才可用。 如下图所示

enter image description here

我在navigation / mobile_navigation.xml中设置了新片段

<fragment
    android:id="@+id/navigation_demografski"
    android:name="com.home.Fragment1"
    android:label="Podaci o osobama"
    tools:layout="@layout/fragment_home" />

<fragment
    android:id="@+id/navigation_biometrijski"
    android:name="com.home.Fragment2"
    android:label="Biometrijski podaci - Desna Ruka"
    tools:layout="@layout/fragment_dashboard" />

<fragment
    android:id="@+id/navigation_biometrijski2"
    android:name="com.home.Fragment3"
    android:label="Biometrijski podaci - Lijeva Ruka"
    tools:layout="@layout/fragment_dashboard2" />

但是我不知道如何从第二个片段中调用第三个片段。 我尝试使用fragmet.replace(),但它只是一个片段与另一个片段重叠。

标签活动

public class TabbedActivity extends AppCompatActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tabbed);
        BottomNavigationView navView = findViewById(R.id.nav_view);

        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
                R.id.navigation_demografski, R.id.navigation_biometrijski).build();

        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
        NavigationUI.setupWithNavController(navView, navController);
    }

}

2 个答案:

答案 0 :(得分:1)

您可以通过以下代码来实现:

public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigationItemSelectedListener {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //loading the default fragment
        loadFragment(new HomeFragment());

        //getting bottom navigation view and attaching the listener
        BottomNavigationView navigation = findViewById(R.id.navigation);
        navigation.setOnNavigationItemSelectedListener(this);
    }


    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment fragment = null;

        switch (item.getItemId()) {
            case R.id.navigation_home:
                fragment = new HomeFragment();
                break;

            case R.id.navigation_dashboard:
                fragment = new DashboardFragment();
                break;

            case R.id.navigation_notifications:
                fragment = new NotificationsFragment();
                break;

            case R.id.navigation_profile:
                fragment = new ProfileFragment();
                break;
        }

        return loadFragment(fragment);
    }

    private boolean loadFragment(Fragment fragment) {
        //switching fragment
        if (fragment != null) {
            getSupportFragmentManager()
                    .beginTransaction()
                    .replace(R.id.fragment_container, fragment)
                    .commit();
            return true;
        }
        return false;
    }
}

答案 1 :(得分:0)

使用FrameLayout作为片段容器,然后在其中切换片段。您可以通过将OnNavigationItemSelectedListener设置为BottomNavigationView并使用

getSupportFragmentManager().beginTransaction().replace(R.id.frameLayout, selectedFragment).commit();

在片段之间切换。在第二个片段中提到的按钮上,添加onClickListener并从Activity调用先前的事务,并将所需的片段作为selectedFragment