Android 导航抽屉活动无法从资源中找到符号

Android 导航抽屉活动无法从资源中找到符号,android,android-layout,android-fragments,navigation-drawer,Android,Android Layout,Android Fragments,Navigation Drawer,因此,根据教程,我正在尝试为我的应用程序创建导航抽屉,并且我正在尝试分配的所有资源,根据指南,应该已经在Android Studio中实现,只是没有出现在代码中 这是一段我无法用我的资源自动完成的代码,顺便说一句,我下载了全部代码并在它们的布局中搜索,但没有找到任何东西 在此方法中,找不到action_websearch: @Override public boolean onPrepareOptionsMenu(Menu menu) { boolean drawerOpen = mDr

因此,根据教程,我正在尝试为我的应用程序创建导航抽屉,并且我正在尝试分配的所有资源,根据指南,应该已经在Android Studio中实现,只是没有出现在代码中

这是一段我无法用我的资源自动完成的代码,顺便说一句,我下载了全部代码并在它们的布局中搜索,但没有找到任何东西

在此方法中,找不到action_websearch:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
    menu.findItem(R.id.action_websearch).setVisible(!drawerOpen);
    return super.onPrepareOptionsMenu(menu);
}

该id是菜单项的名称:

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/action_websearch"
          android:icon="@drawable/action_search"
          android:title="@string/action_websearch"
          android:showAsAction="ifRoom|withText" />
</menu>

您可以在res/menu文件夹中找到它


确保菜单布局中没有错误。

如果您愿意,我可以共享一个您可以修改的代码源

因为我可以给你写一些帮助,但也许你会更困惑

//main活动:

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private DrawerLayout drawerLayout;
    private ArrayAdapter<String> adapter;
    private ActionBarDrawerToggle drawerToggle;
    private String title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Configuracion de las referencias de cada uno de los elementos
        listView = (ListView)findViewById(R.id.list_drawer);
        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        title = getTitle().toString();

        //Llamada al metodo configs
        configs();

        //Configuracion de el boton por default para llamar el drawer en el ActionBar
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }

    private void configs() {
        //Creacion y configuracion de la lista para el drawer
        String[] array = { "1", "2", "3", "4", "5" };
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, array);
        listView.setAdapter(adapter);

        //Configuracion del listener de los elementos de la lista
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, String.valueOf(position), Toast.LENGTH_SHORT).show();
            }
        });

        //Referencia y creacion del drawerToogle pasando como referencia el layout y los strings
        drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) {

            //Metodo llamado cuadno se abre el drawer
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getSupportActionBar().setTitle("Open!");
            }

            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getSupportActionBar().setTitle(title);
            }
        };

        //Configuracion del listener para habilitar el drawer
        drawerToggle.setDrawerIndicatorEnabled(true);
        drawerLayout.setDrawerListener(drawerToggle);
    }

    //Actualiza el estado del navigation drawer
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        drawerToggle.syncState();
    }

    //Mantiene el estado del navigation drawer durante una configuracion de la actividad (Voltear el telefono)
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        drawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }

        //Activa el toogle del navigation drawer
        if (drawerToggle.onOptionsItemSelected(item)) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
public类MainActivity扩展了AppCompatActivity{
私有列表视图列表视图;
私人抽屉布局;
专用阵列适配器;
私人诉讼律师事务所;
私有字符串标题;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//基本要素基准配置
listView=(listView)findViewById(R.id.list\u抽屉);
抽屉布局=(抽屉布局)findViewById(R.id.抽屉布局);
title=getTitle().toString();
//米托多广场酒店
configs();
//操作栏上的抽屉默认配置
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
私有void configs(){
//发票人姓名和地址
字符串[]数组={“1”、“2”、“3”、“4”、“5”};
adapter=new ArrayAdapter(这是android.R.layout.simple\u list\u item\u 1,数组);
setAdapter(适配器);
//lista元素侦听器配置
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
Toast.makeText(MainActivity.this,String.valueOf(position),Toast.LENGTH_SHORT.show();
}
});
//参考和确认抽屉的布局和字符串
drawerToggle=newactionBarDrawerToggle(这个,drawerLayout,R.string.drawer\u打开,R.string.drawer\u关闭){
//梅托多·拉马多·卡德诺在抽屉里
打开图纸上的公共空白(视图抽屉视图){
super.onDrawerOpened(抽屉视图);
getSupportActionBar().setTitle(“打开!”);
}
/**当抽屉处于完全关闭状态时调用*/
公共无效onDrawerClosed(视图){
super.onDrawerClosed(视图);
getSupportActionBar().setTitle(标题);
}
};
//听者辅助能力配置el抽屉
抽屉切换。设置抽屉指示可启用(true);
抽屉布局。设置抽屉链接器(抽屉切换);
}
//导航抽屉
@凌驾
后期创建时受保护的空(捆绑包savedInstanceState){
super.onPostCreate(savedInstanceState);
drawerToggle.syncState();
}
//导航抽屉设计图(Voltear el telefono)
@凌驾
公共无效OnConfiguration已更改(配置newConfig){
super.onConfigurationChanged(newConfig);
drawerToggle.onConfigurationChanged(newConfig);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(右菜单菜单菜单主菜单);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
int id=item.getItemId();
if(id==R.id.action\u设置){
返回true;
}
//Activa el toogle del导航抽屉
如果(抽屉切换选项项选定(项目)){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
}
//layout.xml:

public class MainActivity extends AppCompatActivity {

    private ListView listView;
    private DrawerLayout drawerLayout;
    private ArrayAdapter<String> adapter;
    private ActionBarDrawerToggle drawerToggle;
    private String title;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Configuracion de las referencias de cada uno de los elementos
        listView = (ListView)findViewById(R.id.list_drawer);
        drawerLayout = (DrawerLayout)findViewById(R.id.drawer_layout);
        title = getTitle().toString();

        //Llamada al metodo configs
        configs();

        //Configuracion de el boton por default para llamar el drawer en el ActionBar
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);
    }

    private void configs() {
        //Creacion y configuracion de la lista para el drawer
        String[] array = { "1", "2", "3", "4", "5" };
        adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, array);
        listView.setAdapter(adapter);

        //Configuracion del listener de los elementos de la lista
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, String.valueOf(position), Toast.LENGTH_SHORT).show();
            }
        });

        //Referencia y creacion del drawerToogle pasando como referencia el layout y los strings
        drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, R.string.drawer_open, R.string.drawer_close) {

            //Metodo llamado cuadno se abre el drawer
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getSupportActionBar().setTitle("Open!");
            }

            /** Called when a drawer has settled in a completely closed state. */
            public void onDrawerClosed(View view) {
                super.onDrawerClosed(view);
                getSupportActionBar().setTitle(title);
            }
        };

        //Configuracion del listener para habilitar el drawer
        drawerToggle.setDrawerIndicatorEnabled(true);
        drawerLayout.setDrawerListener(drawerToggle);
    }

    //Actualiza el estado del navigation drawer
    @Override
    protected void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        drawerToggle.syncState();
    }

    //Mantiene el estado del navigation drawer durante una configuracion de la actividad (Voltear el telefono)
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        drawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }

        //Activa el toogle del navigation drawer
        if (drawerToggle.onOptionsItemSelected(item)) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}


是否要从可绘制文件夹中动态获取图像?@vspallas我不明白为什么我不拥有它,它似乎是应该在系统中构建的东西。我如何检查它?打开它,看看是否所有引用的资源都可用。。。另请参见所有布局,布局中的错误会使R无法正常工作。在这种情况下,可能会因为找到这个id而变得臃肿…我问,因为我在我的项目中没有看到菜单文件夹。也许这就是问题所在?正如您所说,我刚刚下载了示例,menu文件夹在res文件夹中,并且有用于菜单的main.xml文件。你必须拥有或实现自己的id,并为你的id进行更改。我的意思是在我的项目中。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能会无效。@cpburnz感谢您的建议:D