You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:23:27