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() 访问标题