如何创建有条件打开的导航视图?

时间:2018-08-30 03:21:02

标签: java android

首先,如Image所示,我在android的两侧都有两个导航视图。左侧为注册为父母的用户,右侧为注册为学费提供者的用户。例如,如果用户A注册为父母,那么他/她只能打开左侧导航。我做了一些研究,大部分使用单选按钮/单选按钮组。不幸的是,我必须使用微调器,我应该编写什么编码来确保可以为某些用户打开导航视图。供您参考,我有3个活动。

1) User.Java ,其中编码是初始化,构造函数和获取器。

2)我将所有微调器代码都放在了RegistrationActivity.Java中。

//USER TYPE SPINNER
    List<String> categories = new ArrayList<>();
    categories.add(0, "Choose Category");
    categories.add("Parents");
    categories.add("Tuition Provider");

    ArrayAdapter<String> dataAdapter;
    dataAdapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, categories);

    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    RegisterUserType.setAdapter(dataAdapter);

    RegisterUserType.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
    {
        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
        {
            if(position==0)
            {
                //Toast.makeText(getApplicationContext(),"No Item Selected",Toast.LENGTH_LONG).show();
            }

            else
            {
                Toast.makeText(getApplicationContext(),parent.getItemAtPosition(position) +" Selected",Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    });

3)我将所有导航视图代码都放在Home.Java中。

menuLeft = (ImageButton) findViewById(R.id.menu_left);
    menuRight = (ImageButton) findViewById(R.id.menu_right);

    parentsNavigation = findViewById(R.id.nav_view);
    tuitionProviderNavigation = findViewById(R.id.nav_view2);

    menuLeft.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if (drawerLayout.isDrawerOpen(GravityCompat.START))
            {
                drawerLayout.closeDrawer(GravityCompat.START);
            }

            else
            {
                drawerLayout.openDrawer(GravityCompat.START);
            }
        }
    });

    menuRight.setOnClickListener(new View.OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            if (drawerLayout.isDrawerOpen(GravityCompat.END))
            {
                drawerLayout.closeDrawer(GravityCompat.END);
            }

            else
            {
                drawerLayout.openDrawer(GravityCompat.END);
            }
        }
    });

    parentsNavigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener()
    {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item)
        {
            UserMenuSelector(item);
            return false;
        }
    });

    tuitionProviderNavigation.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener()
    {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item)
        {
            UserMenuSelector(item);
            return false;
        }
    });

我不能在此处粘贴所有代码,因为它太长了,但是我可以给您发送电子邮件以更好地了解我的XML布局。

1 个答案:

答案 0 :(得分:1)

所有您需要做的就是锁定要禁用的抽屉,如果要启用它则再次解锁

使用drawerLayout.setDrawerLockMode();

在您的情况下,以下代码将关闭具有重力启动功能的一个抽屉

drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.START);

,当您想再次解锁时,只需

drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, GravityCompat.START);

还记得一件事

  

drawerLayout.setDrawerLockMode()允许应用程序限制用户打开或关闭给定抽屉的能力(无法通过滑动打开),但是DrawerLayout仍会响应对openDrawer(),closeDrawer()的调用

因此,在您的情况下,您还考虑禁用ImageView点击,因为它们具有以下方法

以您的情况

当用户单击微调器项目时,您选中if(position==1) 如果满足此条件,则您知道它是父母

所以请在您的Home.Java中进行

执行此操作

    if(parent==true){

//this will disable right drawer

drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED, GravityCompat.END);

//and this will enable left drawer
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED, GravityCompat.START);

//and also do to disable right ImageView
menuRight.setEnabled(false); 

//and also do to enable left ImageView
menuLeft.setEnabled(true);}

现在为学费提供者做相同的操作,但是这次启用右,禁用左, 菜单按钮也一样。