Android - 如何检查抽屉布局中是否有任何项目被点击?
Android - How to check if any item has been clicked in Drawer Layout?
我将 DrawerLayout
中的文件夹的所有文件显示为 SubMenu
。我可以做到,但我想知道如果我点击 DrawerLayout
.
中的任何文件,如何处理点击事件
这是代码
public class HTMLEditor extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
DrawerLayout drawer;
NavigationView navigationView;
Toolbar toolbar;
TextView textViewprojectName;
String projectName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_html_editor);
drawer = findViewById(R.id.drawer);
navigationView = findViewById(R.id.navigation);
toolbar = findViewById(R.id.toolbar);
Intent intent = getIntent();
projectName = intent.getStringExtra("projectName");
navigationView.setNavigationItemSelectedListener(this);
View view = navigationView.getHeaderView(0);
textViewprojectName = view.findViewById(R.id.projectName);
textViewprojectName.append(" " + projectName);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
R.string.navigation_open, R.string.navigation_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
File root = new File(Environment.getExternalStorageDirectory(),
getString(R.string.app_name) + "/HTML Projects/" + projectName);
File[] files = root.listFiles();
Menu m = navigationView.getMenu();
SubMenu subMenu = m.addSubMenu("All Files");
if (files != null && files.length > 0) {
for (File file : files) {
subMenu.add(file.getName());
}
}
getSupportFragmentManager().beginTransaction().replace(R.id.frame,
new EditorFragment()).commit();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
{
// How to handle click event here.
return false;
}
所有文件都显示为 SubMenu
。如果我点击那个文件什么也不会发生。因此,当我单击任何 SubMenu
项时,我想获取该文件的名称(以供进一步使用)。
那么,我该如何实现呢?
subMenu.add(file.getName())
有一个 return 类型的值 MenuItem
。您可以将在循环中添加的所有 MenuItems
存储在 onCreate
中,例如:
List<MenuItem> menuItems = new ArrayList<>();
...
if (files != null && files.length > 0) {
for (File file : files) {
menuItems.add(subMenu.add(file.getName()));
}
}
然后将 onNavigationItemSelected
中的 MenuItem item
与存储的项目进行比较:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
{
if (menuItems.contains(item)) {
String filename = item.getTitle(); // this is your filename
}
return false;
}
理论上,您不必存储所有项目并进行比较,假设所有菜单项都代表文件。然后,您可以通过 onNavigationItemSelected
.
中的 String filename = item.getTitle()
访问标题
我将 DrawerLayout
中的文件夹的所有文件显示为 SubMenu
。我可以做到,但我想知道如果我点击 DrawerLayout
.
这是代码
public class HTMLEditor extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
DrawerLayout drawer;
NavigationView navigationView;
Toolbar toolbar;
TextView textViewprojectName;
String projectName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_html_editor);
drawer = findViewById(R.id.drawer);
navigationView = findViewById(R.id.navigation);
toolbar = findViewById(R.id.toolbar);
Intent intent = getIntent();
projectName = intent.getStringExtra("projectName");
navigationView.setNavigationItemSelectedListener(this);
View view = navigationView.getHeaderView(0);
textViewprojectName = view.findViewById(R.id.projectName);
textViewprojectName.append(" " + projectName);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
R.string.navigation_open, R.string.navigation_close);
drawer.addDrawerListener(toggle);
toggle.syncState();
File root = new File(Environment.getExternalStorageDirectory(),
getString(R.string.app_name) + "/HTML Projects/" + projectName);
File[] files = root.listFiles();
Menu m = navigationView.getMenu();
SubMenu subMenu = m.addSubMenu("All Files");
if (files != null && files.length > 0) {
for (File file : files) {
subMenu.add(file.getName());
}
}
getSupportFragmentManager().beginTransaction().replace(R.id.frame,
new EditorFragment()).commit();
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
{
// How to handle click event here.
return false;
}
所有文件都显示为 SubMenu
。如果我点击那个文件什么也不会发生。因此,当我单击任何 SubMenu
项时,我想获取该文件的名称(以供进一步使用)。
那么,我该如何实现呢?
subMenu.add(file.getName())
有一个 return 类型的值 MenuItem
。您可以将在循环中添加的所有 MenuItems
存储在 onCreate
中,例如:
List<MenuItem> menuItems = new ArrayList<>();
...
if (files != null && files.length > 0) {
for (File file : files) {
menuItems.add(subMenu.add(file.getName()));
}
}
然后将 onNavigationItemSelected
中的 MenuItem item
与存储的项目进行比较:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item)
{
if (menuItems.contains(item)) {
String filename = item.getTitle(); // this is your filename
}
return false;
}
理论上,您不必存储所有项目并进行比较,假设所有菜单项都代表文件。然后,您可以通过 onNavigationItemSelected
.
String filename = item.getTitle()
访问标题