点击TextView触发Intent跳转时应用崩溃问题求助
问题分析与修复方案
1. 语法错误:代码括号未闭合
你的代码中每个setOnClickListener的匿名内部类都未正确闭合onClick方法、OnClickListener的大括号,甚至onCreate方法也没有闭合,这会直接导致编译失败或运行时崩溃。
修复后的完整代码结构:
Button backlogin; TextView elecName, appointmentName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_admin); // Initialize UI components backlogin = findViewById(R.id.backlogin); elecName = findViewById(R.id.elecName); appointmentName = findViewById(R.id.appointmentName); backlogin.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Create an intent to navigate back to the Login activity Intent intent = new Intent(AdminActivity.this, Login.class); startActivity(intent); // Finish the AdminActivity finish(); } // 闭合onClick方法 }); // 闭合OnClickListener elecName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Create an intent to navigate to RecycleViewActivity Intent intent = new Intent(AdminActivity.this, RecycleViewActivity.class); startActivity(intent); } // 闭合onClick方法 }); // 闭合OnClickListener appointmentName.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 注意:Fragment不能用Intent直接启动,需通过FragmentManager处理 AppointmentFragment fragment = new AppointmentFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, fragment) // 替换为你布局中的容器ID .addToBackStack(null) // 可选,加入返回栈 .commit(); } // 闭合onClick方法 }); // 闭合OnClickListener } // 闭合onCreate方法
2. 核心错误:用Intent启动Fragment
AppointmentFragment是Fragment组件,不能通过Intent调用startActivity直接启动,Fragment必须依附于Activity。正确做法是通过FragmentManager执行事务操作:
- 确保
AdminActivity的布局中存在一个Fragment容器(比如FrameLayout,ID设为fragment_container) - 使用
replace或add方法将Fragment添加到容器中
3. 额外简化方案(可选)
可以让AdminActivity实现View.OnClickListener接口,统一处理所有点击事件,避免匿名内部类冗余:
public class AdminActivity extends AppCompatActivity implements View.OnClickListener { Button backlogin; TextView elecName, appointmentName; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_admin); backlogin = findViewById(R.id.backlogin); elecName = findViewById(R.id.elecName); appointmentName = findViewById(R.id.appointmentName); // 设置点击监听 backlogin.setOnClickListener(this); elecName.setOnClickListener(this); appointmentName.setOnClickListener(this); } @Override public void onClick(View v) { int id = v.getId(); if (id == R.id.backlogin) { Intent intent = new Intent(this, Login.class); startActivity(intent); finish(); } else if (id == R.id.elecName) { Intent intent = new Intent(this, RecycleViewActivity.class); startActivity(intent); } else if (id == R.id.appointmentName) { AppointmentFragment fragment = new AppointmentFragment(); getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, fragment) .addToBackStack(null) .commit(); } } }
内容的提问来源于stack exchange,提问作者Raisen Dividina
相关产品推荐
相关产品推荐

