如何使用一个导航抽屉进行全部活动?

问题描述 投票:0回答:1

我正在构建一个仅使用活动的应用程序(因为我听说片段对于新的android用户而言太复杂了。

我正在尝试将我的主导航抽屉应用于所有活动,而不是使用片段。

我的主要活动嵌入了导航抽屉方法,但其他所有活动却没有,因为我无法从其他活动中调用导航抽屉。

主要活动代码:

    DrawerLayout drawerLayout;
    NavigationView navigationView;
    ActionBarDrawerToggle toggle;
    ImageView menuIcon;
    FrameLayout contentMain;

    static final float END_SCALE = 0.7f;

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

        drawerLayout = findViewById(R.id.drawer);
        navigationView = findViewById(R.id.navigation_header);
        menuIcon = findViewById(R.id.imageViewMenuButton2);
        contentMain = findViewById(R.id.contentMain);

        toggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawerOpen, R.string.drawerClose);
        drawerLayout.addDrawerListener(toggle);
        toggle.syncState();

        navigationDrawer();

    }

    private void navigationDrawer() {

        navigationView.bringToFront();
        navigationView.setNavigationItemSelectedListener(this);
        navigationView.setCheckedItem(R.id.home);

        menuIcon.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (drawerLayout.isDrawerVisible(GravityCompat.START))
                    drawerLayout.closeDrawer(GravityCompat.START);
                else drawerLayout.openDrawer(GravityCompat.START);
            }
        });

        animateNavigationDrawer();

    }

    private void animateNavigationDrawer() {

        drawerLayout.setScrimColor(getResources().getColor(R.color.colorPrimaryDark));

        drawerLayout.addDrawerListener(new DrawerLayout.SimpleDrawerListener() {
            @Override
            public void onDrawerSlide(View drawerView, float slideOffset) {

                // Scale the View based on current slide offset
                final float diffScaledOffset = slideOffset * (1 - END_SCALE);
                final float offsetScale = 1 - diffScaledOffset;
                contentMain.setScaleX(offsetScale);
                contentMain.setScaleY(offsetScale);

                // Translate the View, accounting for the scaled width
                final float xOffset = drawerView.getWidth() * slideOffset;
                final float xOffsetDiff = contentMain.getWidth() * diffScaledOffset / 2;
                final float xTranslation = xOffset - xOffsetDiff;
                contentMain.setTranslationX(xTranslation);
            }
        });

    }

    @Override
    public void onBackPressed() {
        if (drawerLayout.isDrawerOpen(GravityCompat.START)) {
            drawerLayout.closeDrawer(GravityCompat.START);
        } else
            super.onBackPressed();
    }

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

        switch (menuItem.getItemId()) {

//            case R.id.home:
//                Intent intent0 = new Intent(activityMain.this, activityMain.class);
//                startActivity(intent0);
//                break;

            case R.id.about:
                Intent intent = new Intent(activityMain.this, activityAboutApp.class);
                startActivity(intent);
                break;

            case R.id.books:
                Intent intent2 = new Intent(activityMain.this, activityBooks.class);
                startActivity(intent2);
                break;

            case R.id.favourites:
                Intent intent3 = new Intent(activityMain.this, activityQuotes.class);
                startActivity(intent3);
                break;

            case R.id.authors:
                Intent intent4 = new Intent(activityMain.this, activityAuthors.class);
                startActivity(intent4);
                break;

            case R.id.newDesign:
                Intent intent5 = new Intent(activityMain.this, QuotesActivity.class);
                startActivity(intent5);
        }
        drawerLayout.closeDrawer(GravityCompat.START);
        return true;
    }
}

我希望启用我的导航抽屉的活动代码(第二个活动):

    public class activityAboutApp extends AppCompatActivity {

    ImageView backButton;

    @Nullable
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_aboutus);

        backButton = findViewById(R.id.imageViewMenuButton);
        backButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                activityAboutApp.super.onBackPressed();
            }
        });

    }
}

您可以看到,我退出第二个活动的唯一方法是通过onBackPressed()函数使用后退按钮。这不是我想要的。我正在寻找的是当用户单击第二个活动上的菜单按钮时,将调用导航抽屉(换句话说,将调用导航菜单,并且用户可以选择下一步去哪里)。

两个活动的.xml布局都已设置,并且所有必需的导入均已建立。

java android android-activity navigation-drawer android-imagebutton
1个回答
0
投票

实现此目标的最佳方法是分段,但是您可以采取解决方法。创建一个超级MainActivity并将Navigation Drawer,其他常用方法以及所有内容放入此活动中,并将该活动扩展到所有活动。这样,您无需为每个活动都初始化导航抽屉,只需要将导航抽屉的XML包含在每个活动的XML文件中。让我知道您是否需要我的帮助来实现这一目标,我们可以根据需要进行协作。

© www.soinside.com 2019 - 2024. All rights reserved.