Android Studio 借助Switch处理多按钮点击实现页面跳转问题求助
问题核心
你目前的写法混淆了Android两种页面实现逻辑,导致点击无响应:
你在MainActivity里点击menu按钮时,仅仅是把当前MainActivity的布局换成了activity_toggle_menu.xml,并没有启动你写的ToggleMenu Activity。三个菜单按钮的点击逻辑全是写在ToggleMenu类里的,但当前前台运行的始终是MainActivity,自然点击不会触发任何逻辑。
下面给你两种可行的实现方案,你按需选即可:
方案1:多Activity跳转(更符合Android官方开发规范)
这种方案是把不同页面拆成独立Activity,互相跳转实现页面切换:
- 先在项目的
AndroidManifest.xml文件的<application>标签内添加ToggleMenu的注册声明,否则系统无法识别这个Activity:
<activity android:name=".ToggleMenu" android:exported="false" />
- 修改MainActivity里的menu按钮点击逻辑,不要用
setContentView,直接跳转ToggleMenu:
package com.example.certtracker; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); //Handles the Menu button on the home screen Button menu = findViewById(R.id.menuButton); menu.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 启动ToggleMenu Activity startActivity(new Intent(MainActivity.this, ToggleMenu.class)); // 如果你点击返回不想回到首页,可以加一行finish(); } }); } }
这个方案你已经写好的ToggleMenu代码不需要做任何修改,就能正常生效。
方案2:单Activity切换布局(适合简单小型项目)
如果你不想写多个Activity,就用同一个Activity切换不同布局实现,那可以直接删掉ToggleMenu类,所有逻辑都放在MainActivity里即可:
package com.example.certtracker; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; public class MainActivity extends AppCompatActivity implements View.OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_home); // 绑定首页按钮监听 bindHomeListener(); } // 绑定首页menu按钮的点击事件 private void bindHomeListener() { Button menu = findViewById(R.id.menuButton); menu.setOnClickListener(v -> switchToMenuLayout()); } // 切换到菜单布局,同时绑定菜单按钮的监听 private void switchToMenuLayout() { setContentView(R.layout.activity_toggle_menu); Button home = findViewById(R.id.homeScreen); Button cert = findViewById(R.id.cert_button); Button climb = findViewById(R.id.climb_button); home.setOnClickListener(this); cert.setOnClickListener(this); climb.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()) { case R.id.homeScreen: // 切回首页后要重新绑定首页的按钮监听 setContentView(R.layout.activity_home); bindHomeListener(); break; case R.id.climb_button: setContentView(R.layout.activity_climbs); break; case R.id.cert_button: setContentView(R.layout.activity_certifications); break; } } }
注意:每次调用
setContentView切换布局后,之前绑定的所有控件监听都会失效,必须重新给新布局里的控件绑定监听事件,否则点击不会有反应。
内容的提问来源于stack exchange,提问作者shnanzo
相关产品推荐
相关产品推荐

