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

两个oncreate(bundle savedinstancestate)在同一个activity?

程俊健
2023-03-14

我是android开发的新手,遇到了一个问题,我似乎无法绕开,也无法让我的脑袋去解决这个问题。

我正在尝试添加一个导航抽屉的activity有一个底部导航栏在Java程序。我得到了xml看起来很好和工作,但下面的Java报告了以下错误。“'on create(Bundle)'已经在'myapp'中定义了”,我理解并且可以看到,但我不知道如何解决它--这可能吗?

公共类Dash扩展AppCompatActivity{private DrawerLayout Drawer;

Button signout;
ChipNavigationBar chipNavigationBar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_dash);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    signout=findViewById(R.id.logout);
    signout.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            FirebaseAuth.getInstance().signOut();
            startActivity(new Intent(getApplicationContext(),Existing.class));
            finish();
        }
    });

    chipNavigationBar = findViewById(R.id.bottom_nav_menu);
    chipNavigationBar.setItemSelected(R.id.bottom_nav_menu, true);
    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new NewsFragment()).commit();
    bottomMenu();
}

private void bottomMenu() {

    chipNavigationBar.setOnItemSelectedListener(new ChipNavigationBar.OnItemSelectedListener() {
        @Override
        public void onItemSelected(int i) {
            Fragment fragment = null;
            switch (i) {
                case R.id.bottom_nav_menu:
                    fragment = new HomeFragment();
                    break;

                case R.id.bottom_nav_news:
                    fragment = new NewsFragment();
                    break;

                case R.id.bottom_nav_profile:
                    fragment = new ProfileFragment();
                    break;
            }
            getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
        }
    });

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

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

    drawer = findViewById(R.id.drawer_layout);

    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
            R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();
}
@Override public void onBackPressed(){
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);
        } else {
            super.onBackPressed();
        }
    }
}

共有1个答案

曹旭
2023-03-14

删除一个oncreate(。。。。)

请尝试以下代码:

public class Dash extends AppCompatActivity {
    private DrawerLayout drawer;

    Button signout;
    ChipNavigationBar chipNavigationBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dash);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
        signout=findViewById(R.id.logout);
        drawer = findViewById(R.id.drawer_layout);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();
        signout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                FirebaseAuth.getInstance().signOut();
                startActivity(new Intent(getApplicationContext(),Existing.class));
                finish();
            }
        });

        chipNavigationBar = findViewById(R.id.bottom_nav_menu);
        chipNavigationBar.setItemSelected(R.id.bottom_nav_menu, true);
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new NewsFragment()).commit();
        bottomMenu();
    }

    private void bottomMenu() {

        chipNavigationBar.setOnItemSelectedListener(new ChipNavigationBar.OnItemSelectedListener() {
            @Override
            public void onItemSelected(int i) {
                Fragment fragment = null;
                switch (i) {
                    case R.id.bottom_nav_menu:
                        fragment = new HomeFragment();
                        break;

                    case R.id.bottom_nav_news:
                        fragment = new NewsFragment();
                        break;

                    case R.id.bottom_nav_profile:
                        fragment = new ProfileFragment();
                        break;
                }
                getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
            }
        });

    }
 
    @Override public void onBackPressed(){
            if (drawer.isDrawerOpen(GravityCompat.START)) {
                drawer.closeDrawer(GravityCompat.START);
            } else {
                super.onBackPressed();
            }
        }
    }
 类似资料:
  • 我写了一个启动两个线程的代码片段;一个线程打印所有奇数,而另一个线程打印所有偶数。我使用了内在锁和线程通信命令的组合来实现两个线程的正确交叉。这是我的代码, 以下是我的问题: > 奇数线程在printOdd()函数中执行,而偶数线程在print偶数()函数中执行。我对两个线程都使用一个内在锁;我不明白两个线程怎么能同时存在于各自的同步块中,因为使用了相同的锁。 我从代码中删除了线程通信语句(通知,

  • 问题内容: 我运行foo.com。我在foo.com中有两个不同的应用程序:一个是foo.com/bar,另一个是foo.com/example。我使用会话来跟踪有关用户登录的信息,但是如果用户从foo.com/bar转到foo.com/example,则foo.com/example会看到用户从foo.com/启动的会话并使用该信息。我的问题是,如何同时为每个目录进行两个不同的会话? 问题答案:

  • 问题内容: 我想知道如果在同一个对象上同步两次,在Java中是否会出现任何奇怪的行为? 场景如下 两种方法都使用该对象并对其进行同步。当第一个方法调用第二个方法时,它会被锁定而停止吗? 我不这么认为,因为它是同一个线程,但是我不确定是否可能会出现其他任何奇怪的结果。 问题答案: 同步块使用 可重入 锁,这意味着如果线程已经持有该锁,则它可以重新获取它而不会出现问题。因此,您的代码将按预期工作。 请

  • 在一个表中有两列可以是来自同一表的外键,这样可以吗? 例如: 我有一个“address”表,表中有列: id,street,city_id,state,country(或id,street,city_id,state_id,state_id) 我有一个'states'表,保存状态和国家:id、name、level 那么我可以把states_id放在地址表的state和country中吗(如上面的括

  • 问题内容: 我在一个父对象下有两个div ,父div的宽度为100%: 条件是: 我要在同一行上两个div。 右div可能存在或可能不存在。当它存在时,我希望它始终固定在右侧。但是,左div必须具有弹性-其宽度取决于其内容。 我已经尝试过float:left和dispaly:inline-block,但是似乎都没有解决方案。 任何建议,将不胜感激。 问题答案: 如果您不关心IE7,我会使用@san

  • 目前是同一个tomcat下有两个应用A,B A应用修改了语言环境(由中文修改成为英文) 这时候我希望B的LocaleContextHolder环境上下文也和A保持一致,请问怎么实现?

  • 我在同一个活动中使用了两个时间选择器,让用户为特定任务选择开始时间和停止时间,我使用了支持库中可用的DialogFragment类,以向后兼容旧的Android版本。

  • 我是ExtJS新手。 我在同一页上有两个网格。第一个网格有3列。只有第二个。问题是,当渲染第二个网格时,它会覆盖第一个网格的属性。 例如,当我试图编辑第一个网格中的行时,它需要第二个网格中的行的宽度。