Android 您能否从ActionBar中的下拉导航启动活动意图

Android 您能否从ActionBar中的下拉导航启动活动意图,android,android-intent,android-actionbar,Android,Android Intent,Android Actionbar,您能否使用ActionBar下拉导航中的意图启动活动 ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() { @Override    public boolean onNavigationItemSelected(final int itemPosition,long itemId) {             launchActivity(itemPosition);  

您能否使用ActionBar下拉导航中的意图启动活动

ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() {
    @Override
    public boolean onNavigationItemSelected(final int itemPosition,long itemId) {
             launchActivity(itemPosition);
             return true;
             }
    };

    getActionBar().setListNavigationCallbacks(adapter, navigationListener);
}
以下是该方法:

 protected void launchActivity(int itemPosition) {
     Intent intent;
     switch (itemPosition) {
        case 1:
           intent = new Intent(this, MyActivity.class);
           startActivity(intent);
           break;
        case 2:
           ...
           ...
     }
}

这会导致手机崩溃并重新启动(看起来内存不足)。

您完全可以从操作栏下拉导航启动活动


活动是否启动然后崩溃?

我怀疑这是因为
onNavigationItemSelected
在活动启动时被调用,即用户根本没有从导航列表中选择任何内容

launchActivity
方法中,您需要检测要启动的活动是否是已在运行的活动,如果是,请不要尝试启动另一个活动。这里发生的情况是,您的活动开始,立即启动
onNavigationItemSelected
,然后您的
launchActivity
方法启动另一个活动,然后重复此过程,直到您的设备内存不足

您需要将代码添加到
launchActivity
方法:

protected void launchActivity(int itemPosition) {
    Intent intent;
    switch (itemPosition) {
        case 1:
            if (<this activity is not MyActivity>) {
                intent = new Intent(this, MyActivity.class);
                startActivity(intent);
            }
            break;
        case 2:
            ...
            ...
    }
}
受保护的无效启动活动(int itemPosition){
意图;
开关(位置){
案例1:
如果(){
intent=新的intent(this,MyActivity.class);
星触觉(意向);
}
打破
案例2:
...
...
}
}

这很简单,但确实需要技巧

protected void launchActivity(int itemPosition, Context context) {
     Intent intent;
     switch (itemPosition) {
        case 1:
           intent = new Intent(context, MyActivity.class);
           startActivity(intent);
           break;
        case 2:
           ...
           ...
     }
}