首先,如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布局。
答案 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);}
现在为学费提供者做相同的操作,但是这次启用右,禁用左, 菜单按钮也一样。