我正在尝试在仪表板Navigation Drawer Activity上实现Activity。在我的应用程序中,我创建了一个主题,其中删除了“工具栏/ ActionBar”,并将汉堡菜单的ImageView放在custom layout上,并将其包含在我的仪表板布局中。我要的是单击此ImageView时将显示滑动抽屉。

我想做的是通过com.project.projectname-> New-> activity->'Navigation Drawer Activity'添加一个Navigation Drawer Activity,并自动添加NavigationActivity class , activity_navigation.xmlapp_bar_navigation.xml, etc

但是我想知道如何打开抽屉?
在我的Dashboard Activity中,我添加了这个

 public class DashboardActivity extends AppCompatActivity {

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

   View side_tab = findViewById(R.id.side_tab);
    expanded_menu = (ImageView) side_tab.findViewById(R.id.expanded_menu);

  expanded_menu.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            // open drawer here
        }
    });


另外,在NavigationActivity中它使用ActionBarDrawerToggle,我不能使用它,因为我没有应用ActionBar。但是我可以使用什么替代方法呢?

这是我的NavigationActivity

public class NavigationActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

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

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}

@Override
public void onBackPressed() {
    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);
    } else {
        super.onBackPressed();
    }
}

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

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}

@SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    int id = item.getItemId();
    Intent goToSreen;

    if (id == R.id.nav_dashboard) {
        goToSreen = new Intent(NavigationActivity.this, DashboardActivity.class);
        startActivity(goToSreen);
    } else if (id == R.id.nav_others) {

    }

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    drawer.closeDrawer(GravityCompat.START);
    return true;
}
}


感谢您的热心帮助。



更新资料

因此,在“仪表板活动”中,我添加了以下内容

NavigationActivity navigationActivity;

@Override
protected void onCreate(Bundle savedInstanceState) {

 super.onCreate(savedInstanceState);
    setContentView(R.layout.dashboard);

    View side_tab = findViewById(R.id.side_tab);
    expanded_menu = (ImageView) side_tab.findViewById(R.id.expanded_menu);

 expanded_menu.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            navigationActivity = new NavigationActivity() ;
            navigationActivity.drawer.openDrawer(GravityCompat.START);
        }
    });


在我的导航活动中,添加一个全局变量

public class NavigationActivity extends AppCompatActivity
    implements NavigationView.OnNavigationItemSelectedListener {

DrawerLayout drawer;


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

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
    navigationView.setNavigationItemSelectedListener(this);
}


我已经设法在“仪表板活动”中调用drawer,但是单击汉堡菜单时,滑动菜单仍然不显示。该应用程序崩溃并显示java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.widget.DrawerLayout.openDrawer(int)' on a null object reference

最佳答案

将此添加到NavigationActivity中

public class NavigationActivity extends AppCompatActivity
        implements NavigationView.OnNavigationItemSelectedListener {

//Add this line
    public static DrawerLayout drawer;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigation);

    drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.setDrawerListener(toggle);
    toggle.syncState();
.......


接下来改变这个

expanded_menu.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                // open drawer here
                NavigationActivity. drawer.openDrawer(GravityCompat.START);
        }
   });


尝试此希望可以解决您的问题。

关于android - 单击ImageView时如何打开“滑动抽屉导航”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43775173/

10-11 22:54
查看更多