我想启动 LoginActivity 然后进入 Navigation Drawer Activity (MainActivity) 但总是出错?

Posted

技术标签:

【中文标题】我想启动 LoginActivity 然后进入 Navigation Drawer Activity (MainActivity) 但总是出错?【英文标题】:I wanted to start LoginActivity then enter to Navigation Drawer Activity (MainActivity) but always error? 【发布时间】:2017-04-19 23:52:35 【问题描述】:

这是我的登录活动,我有一个按钮可以进入包含导航抽屉的 MainActivity

public class LoginActivity extends AppCompatActivity 

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

        Button btn = (Button) findViewById(R.id.button);

        btn.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Intent i = new Intent(LoginActivity.this, MainActivity.class);
                startActivity(i);
            
        );
    

这是我的 MainActivity

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            
        );

        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.main, 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();

        if (id == R.id.nav_camera) 
            // Handle the camera action
         else if (id == R.id.nav_gallery) 

         else if (id == R.id.nav_slideshow) 

         else if (id == R.id.nav_manage) 

         else if (id == R.id.nav_share) 

         else if (id == R.id.nav_send) 

        

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

我已经更改了AndroidManifest,将LoginActivity设为默认启动Activity,但是当我点击按钮时,它不会进入MainActivity。

这是错误

E/AndroidRuntime: 致命异常: main 进程:com.breakthrough.myapplication22,PID:11422 java.lang.RuntimeException:无法启动活动 ComponentInfocom.breakthrough.myapplication22/com.breakthrough.myapplication22.MainActivity: java.lang.IllegalStateException:这个活动已经有一个动作 酒吧提供的窗户装饰。不要要求 Window.FEATURE_SUPPORT_ACTION_BAR 并将 windowActionBar 设置为 false 您的主题改为使用工具栏。 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 原因:java.lang.IllegalStateException:此活动已经有一个由窗口装饰提供的操作栏。做 不请求 Window.FEATURE_SUPPORT_ACTION_BAR 并设置 windowActionBar 在您的主题中设置为 false 以改用工具栏。 在 android.support.v7.app.AppCompatDelegateImplV9.setSupportActionBar(AppCompatDelegateImplV9.java:199) 在 android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:133) 在 com.breakthrough.myapplication22.MainActivity.onCreate(MainActivity.java:24) 在 android.app.Activity.performCreate(Activity.java:6237) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 在 android.app.ActivityThread.-wrap11(ActivityThread.java) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 在 android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:148) 在 android.app.ActivityThread.main(ActivityThread.java:5417) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

【问题讨论】:

如果您要使用异常消息进行互联网搜索,您将在此处提问之前得到答案... Do not request Window.FEATURE_ACTION_BAR issue的可能重复 【参考方案1】:

删除这两行:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

【讨论】:

【参考方案2】:

错误信息很清楚,您的代码在 MainActivity.java 第 24 行失败。

setSupportActionBar(toolbar);

因为您的 MainActivity 已经有默认的 ActionBar。要解决此问题,请转到您的 styles.xml 并从

更改您的 baseTheme
parent="Theme.AppCompat.Light.DarkActionBar">

parent="Theme.AppCompat.Light.NoActionBar">

【讨论】:

以上是关于我想启动 LoginActivity 然后进入 Navigation Drawer Activity (MainActivity) 但总是出错?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Koin 时无法通过显式意图启动活动(Koincontext 已启动)

存储库和用例有啥区别?

具有不同活动的社交登录

登录时从另一个活动启动应用程序

点击打开登录活动而不是主要活动的通知

安卓开发 在两个Activity界面之间互相切换 我设置的是back1按钮返回到第一个LoginActivity(主界面)