gpt4 book ai didi

java - 如何创建有条件打开的导航 View ?

转载 作者:行者123 更新时间:2023-12-02 10:52:08 26 4
gpt4 key购买 nike

首先,我在 android 中两侧都有两个导航 View ,如 Image 所示。 。左侧为作为家长注册的用户,右侧为作为补习机构注册的用户。例如,如果用户 A 注册为家长,那么他/她只能打开左侧导航。我做了一些研究,主要使用单选按钮/单选组。不幸的是,我必须使用微调器,我应该编写什么代码来确保可以为某些用户打开导航 View 。供您引用,我有 3 项 Activity 。

1)User.Java其中编码,我有编码初始化,构造函数和getter。

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,我将所有导航 View 编码放在其中。

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 布局。

最佳答案

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

使用drawerLayout.setDrawerLockMode();

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

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

当您想再次解锁时,只需

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

记住一件事

drawerLayout.setDrawerLockMode() allows the application to restrict the user's ability to open or close the given drawer (cannot open via sliding) but DrawerLayout will still respond to calls to openDrawer(), closeDrawer()

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

就您而言

当用户单击微调项目时,您检查if(position==1)如果这个条件成立,你就知道它是 parent

所以在你的 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);}

现在学费提供者也做同样的事情,但这次启用右侧并禁用左侧,菜单按钮也相同。

关于java - 如何创建有条件打开的导航 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52088795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com