Android Studio实现按钮跳转Activity时onCreate重复定义报错
报错原因
你遇到的method onCreate(Bundle) is already defined in class MainActivity编译错误,直接诱因是MainActivity类中存在两个签名完全一致的onCreate(Bundle)方法,除此之外你的按钮跳转逻辑本身也存在结构问题:
- 你把第二个按钮
button2的初始化、点击事件绑定代码错放在了独立的onClick(View v)方法中,这部分代码不会在Activity启动时自动执行,按钮根本绑定不上点击事件 - 这个独立的
onClick方法里直接写了跳转Activity3的逻辑,只要方法被触发就会直接跳转,不需要等用户点击按钮 - 存在多套跳转到Activity3的冗余代码,没有实际作用
修复方案
- 检查类中所有
onCreate方法,只保留一个带@Override注解、第一行调用super.onCreate(savedInstanceState)的onCreate方法,删掉其余重复的同名方法 - 把所有按钮的初始化、点击事件绑定代码,全部移动到保留的
onCreate方法内部,且必须放在setContentView(R.layout.activity_main)这行代码之后执行 - 删掉零散写在点击监听器外的冗余跳转逻辑,跳转动作只放在按钮点击的回调里执行
修复后的完整可运行代码如下:
public class MainActivity extends AppCompatActivity { private Button button1; private Button button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 绑定第一个按钮,点击跳转到Activity2 button1 = (Button) findViewById(R.id.octubre); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openActivity2(); } }); // 绑定第二个按钮,点击跳转到Activity3 button2 = (Button) findViewById(R.id.aucas); button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { openActivity3(); } }); } public void openActivity2() { Intent intent = new Intent(this, Activity2.class); startActivity(intent); } public void openActivity3() { Intent intent = new Intent(this, Activity3.class); startActivity(intent); } }
后续新增更多跳转按钮时,只需要重复两个步骤即可:
- 在
onCreate方法中通过findViewById获取对应按钮的实例- 给按钮设置点击监听器,在监听器的
onClick回调里调用对应页面的跳转方法
不要在类中随意编写和Activity生命周期方法同名的方法,也不要把控件初始化逻辑写到onCreate方法外部。
内容的提问来源于stack exchange,提问作者José Martín Carrillo
相关产品推荐
相关产品推荐

