当前位置: 首页 > 知识库问答 >
问题:

导航抽屉用于多个活动而不选择导航抽屉活动

包永新
2023-03-14

我是android新手。我想实现一个由项目列表组成的导航抽屉,单击它会打开一个新活动。基本上是所有活动的导航抽屉。当我从导航抽屉中选择一个项目时,特定的活动就会打开。导航抽屉代码是通过执行空活动来实现的。我想在所有活动中实现导航抽屉功能,这些活动被视为空活动,这些活动已经有了一些功能,导航抽屉功能也可以工作。请帮帮我。

这是activity_header档案

<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawer"
tools:context=".MainActivity">
<android.support.design.widget.NavigationView
    app:headerLayout="@layout/header"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:background="@color/white"
    app:menu="@menu/drawermenu"
    android:layout_gravity="start"
    android:id="@+id/navigationView"
    >
   </android.support.design.widget.NavigationView>
 </android.support.v4.widget.DrawerLayout>

这是我的主要活动

<GridView xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/gridview"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:columnWidth="90dp"
   android:numColumns="2"
   android:verticalSpacing="10dp"
   android:horizontalSpacing="10dp"
   android:stretchMode="columnWidth"
   android:gravity="center"
   android:layout_marginTop="30dp"/>

这是头活动java代码

public class HeaderActivity extends AppCompatActivity {


protected DrawerLayout myDrawerLayout;
protected ActionBarDrawerToggle toggle;
protected NavigationView navigationView;


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



    myDrawerLayout=(DrawerLayout)findViewById(R.id.drawer);
    navigationView=(NavigationView) findViewById(R.id.navigationView);
    navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {

            Log.e("log_cat", "Error Response" + "Error");

            switch (menuItem.getItemId())
            {
                case R.id.dashboard:
                    Toast.makeText(HeaderActivity.this,"Dashboard Clicked",Toast.LENGTH_LONG).show();
                    break;

                case R.id.devotional:
                    Toast.makeText(HeaderActivity.this,"devotional Clicked",Toast.LENGTH_LONG).show();
                    break;

                case R.id.inspiration:
                    Toast.makeText(HeaderActivity.this,"inspiration Clicked",Toast.LENGTH_LONG).show();
                    break;

                case R.id.happy:
                    Toast.makeText(HeaderActivity.this,"happy Clicked",Toast.LENGTH_LONG).show();
                    break;

                case R.id.sad:
                    Toast.makeText(HeaderActivity.this,"sad Clicked",Toast.LENGTH_LONG).show();
                    break;

                case R.id.love:
                    Toast.makeText(HeaderActivity.this,"love Clicked",Toast.LENGTH_LONG).show();
                    break;


            }
            return false;
        }
    });
    toggle = new ActionBarDrawerToggle(
            this,
            myDrawerLayout,
            R.string.open,
            R.string.close
    ) {
        public void onDrawerClosed(View view) {
            //Snackbar.make(view, R.string.drawer_close, Snackbar.LENGTH_SHORT).show();
        }

        html" target="_blank">public void onDrawerOpened(View drawerView) {
            //Snackbar.make(drawerView, R.string.drawer_open, Snackbar.LENGTH_SHORT).show();
        }
    };
    myDrawerLayout.addDrawerListener(toggle);
    toggle.syncState();
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);


    // gridview.setAdapter(i);

}

@Override
public boolean onOptionsItemSelected (MenuItem item) {
    if (toggle.onOptionsItemSelected (item)) {
        return true;
    }
    return super.onOptionsItemSelected(item);

}

}

这是我的主要活动java代码

公共类主活动扩展Header活动{

GridView grid;
public static String[] osNameList = {
        "Devotional",
        "Inspirational",
        "Happy",
        "Sad",
        "Love"

} ;
public static int[] osImages = {
        R.drawable.devotional,
        R.drawable.inspirational,
        R.drawable.happy,
        R.drawable.sad,
        R.drawable.love

};


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    getLayoutInflater().inflate(R.layout.activity_main, myDrawerLayout);
    GridView gridview = (GridView) findViewById(R.id.gridview);
    gridview.setAdapter(new ImageAdapter(this, osNameList, osImages));

}

}

在此代码中,setNavigationItemSelectedListener在mainactivity中不工作,但网格上的setOnClickListener正在工作。当我们点击任何导航菜单元素时,它就会移动到该活动。

共有2个答案

别永年
2023-03-14

有两种方法可以在所有活动中实现抽屉,您可以使用fragment,也可以在基本活动中创建一个NavigationDrawer,并在需要的地方实现它。在不同的活动中使用相同的导航抽屉

平山
2023-03-14

如果您想在所有页面中包含NavigationDrawer,您应该为功能页面使用片段。如果你想看一个例子,你可以在这里看到

此外,我希望您推荐将Android Jetpack导航组件与NavigationUIDrawerLayout一起使用。

 类似资料:
  • 问题内容: 有没有一种方法可以只配置一次导航抽屉,并在多个Activites上显示它? 问题答案: 为此,只需创建一个实现抽屉的BaseActivity类,然后让所有其他活动扩展该抽屉即可。

  • 我正在尝试使用Visual Studio2017在Xamarin中创建一个导航抽屉。我在谷歌做了一些研究后创建了导航抽屉。但当我尝试从菜单中打开活动时,导航抽屉消失了。 我想在我的所有活动中都有我的导航抽屉,而不是在所有活动中重复。 链接到我的项目:https://github.com/chindara/XamarinAndroidNavigationDrawer 更新链接:https://git

  • 有没有一种方法可以只配置一次导航抽屉,并在多个活动上显示它?

  • 是否可以在android中使用导航抽屉,但我不想更新片段,而是想在活动之间切换,作为我在应用程序中的导航方式。

  • 我正在试用本教程中给出的导航抽屉(幻灯片菜单)。 上面的链接和我的不同之处在于,我试图调用活动而不是调用片段。当应用程序打开时,我无法看到导航抽屉菜单,我只能看到打开HOME活动的操作栏。 以下是我更改的代码:(是否需要一个片段,或者我可以在导航抽屉的第一个屏幕上使用活动?) 我如何解决这个问题,以便在我的家庭活动中显示导航抽屉? 更新: 我甚至尝试了以下链接中给出的选项: 如何使用导航抽屉调用我

  • 二等 三等