【问题标题】:Two oncreate(bundle savedinstancestate) in the same activity?两个 oncreate(bundle savedinstancestate) 在同一个活动中?
【发布时间】:2020-12-11 15:03:02
【问题描述】:

我对 android 开发非常陌生,遇到了一个我似乎无法解决或无法理解解决方案的问题。

我正在尝试将导航抽屉添加到 Java 程序中具有底部导航栏的活动。我的 XML 看起来不错并且可以正常工作,但是下面的 java 报告了以下错误:

'onCreate(Bundle)' is already defined in 'MyApp' 

我理解并且可以看到但我不知道如何解决它 - 可能吗?

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);
        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();
            }
        }
    }

【问题讨论】:

    标签: java android oncreate


    【解决方案1】:

    删除一个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();
                }
            }
        }
    

    【讨论】:

    • 太棒了!非常感谢!我需要添加“工具栏工具栏= null;”或者我遇到了一个新错误。假设这没问题?
    • 是的,当您替换 onCreate 中的片段时,还从 bottomMenu() 方法中删除 getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, fragment).commit();
    • 太棒了!非常感谢 - 现在删除它允许从底部导航中选择此活动,而不会导致应用崩溃。
    • 所以我的活动正在运行,但底部导航覆盖了我的抽屉菜单。是否可以在打开抽屉菜单时隐藏底部导航,或者是否可以让抽屉菜单覆盖底部导航?我已经尝试过处理两者之间的海拔,但不幸的是它并不那么容易。
    • 如果这解决了您的问题,请接受未来参考的答案。
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多