Android开发点击Button无法跳转至其他Activity问题排查
问题根源
点击按钮无响应的核心原因是按钮点击监听器从未完成注册:你把setOnClickListener绑定逻辑嵌套在了sendMessage()方法内部,但该方法在页面加载完成后从未被触发执行,等于按钮自始至终没有绑定任何点击响应逻辑,自然不会触发跳转。
你的Manifest配置和目标Activity代码没有问题,只需要修正MainActivity的点击逻辑即可,以下两种实现二选一即可,不要混用。
修复方案
方案1:配合XML的onClick属性实现
如果你原本打算通过布局里的android:onClick属性绑定点击事件,按以下步骤修改:
- 精简MainActivity代码,移除sendMessage方法内多余的监听器绑定逻辑,直接在sendMessage内写跳转逻辑,控件初始化提前放到onCreate里避免重复查找:
public class MainActivity extends AppCompatActivity { public static final String EXTRA_MESSAGE = "com.example.learn1.MESSAGE"; private EditText editText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); editText = findViewById(R.id.editText1); } public void sendMessage(View view) { String message = editText.getText().toString(); Intent intent = new Intent(this, Displaymsgactivity.class); intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); } }
- 打开
activity_main.xml布局,给id为open_activity_button的按钮标签添加onClick属性,和方法名对应:
<Button android:id="@+id/open_activity_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="跳转" android:onClick="sendMessage"/>
方案2:纯代码绑定监听器
如果你不想在XML里写onClick属性,直接把监听器绑定逻辑放到onCreate生命周期里执行,删除多余的sendMessage方法即可:
public class MainActivity extends AppCompatActivity { public static final String EXTRA_MESSAGE = "com.example.learn1.MESSAGE"; private EditText editText; private Button openActivityBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化控件 editText = findViewById(R.id.editText1); openActivityBtn = findViewById(R.id.open_activity_button); // 绑定点击监听 openActivityBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String message = editText.getText().toString(); Intent intent = new Intent(MainActivity.this, Displaymsgactivity.class); intent.putExtra(EXTRA_MESSAGE, message); startActivity(intent); } }); } }
额外优化建议
- 类名建议遵循Java大驼峰命名规范,
Displaymsgactivity可调整为DisplayMsgActivity,修改后同步更新Manifest和Intent里的类名引用即可,不影响当前功能运行,属于代码规范优化。 - 尽量不要在点击事件触发时反复调用
findViewById查找控件,提前在onCreate里初始化好控件引用可以减少不必要的性能开销。
内容的提问来源于stack exchange,提问作者Himakshi Kohli
相关产品推荐
相关产品推荐

