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

Fragment中启动Activity异常:仅首按钮正常其余点击无报错崩溃

Fragment中按钮跳转Activity,部分按钮点击导致应用崩溃无报错

问题描述

我尝试在BerandaFragment中通过三个按钮(btntransaksi、btnproduk、btnpelanggan)分别启动TransaksiActivity、ProdukActivity和PelangganActivity,实现代码如下:

class BerandaFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val v: View = inflater.inflate(R.layout.fragment_beranda, container, false)

        val listnr: View.OnClickListener = object : View.OnClickListener {
            override fun onClick(v: View?) {
                val intent = Intent(activity, TransaksiActivity::class.java)
                startActivity(intent)
            }
        }
        val listnr2: View.OnClickListener = object : View.OnClickListener {
            override fun onClick(v: View?) {
                val intent2 = Intent(activity, ProdukActivity::class.java)
                startActivity(intent2)
            }
        }
        val listnr3: View.OnClickListener = object : View.OnClickListener {
            override fun onClick(v: View?) {
                val intent3 = Intent(activity, PelangganActivity::class.java)
                startActivity(intent3)
            }
        }
        val btn = v.findViewById<View>(R.id.btntransaksi) as Button
        btn.setOnClickListener(listnr)
        val btn2 = v.findViewById<View>(R.id.btnproduk) as Button
        btn2.setOnClickListener(listnr2)
        val btn3 = v.findViewById<View>(R.id.btnpelanggan) as Button
        btn3.setOnClickListener(listnr3)
        return v
    }

}

目前第一个按钮(btntransaksi)可正常跳转,但点击另外两个按钮时,应用无报错提示却直接停止运行,恳请帮忙排查问题原因并提供解决办法。


解决办法及排查思路

1. 检查目标Activity是否在Manifest中注册

这是最常见的原因:TransaksiActivity能正常跳转说明已注册,但ProdukActivity和PelangganActivity可能未在AndroidManifest.xml中声明,启动未注册的Activity会直接导致应用崩溃。

解决:打开AndroidManifest.xml,在<application>标签内添加以下注册代码:

<activity android:name=".ProdukActivity" />
<activity android:name=".PelangganActivity" />

2. 检查按钮ID与类型匹配问题

原代码中使用as Button强制类型转换,如果布局文件中btnproduk或btnpelanggan的实际控件类型不是Button(比如是TextView、ImageView),或者ID拼写错误,会触发ClassCastException导致崩溃,且部分情况下不会弹出明显报错。

优化写法(避免强转崩溃):

// 用可空类型接收,避免强转失败崩溃
val btnProduk = v.findViewById<Button>(R.id.btnproduk)
btnProduk?.setOnClickListener {
    startActivity(Intent(activity, ProdukActivity::class.java))
}

3. 排查目标Activity内部代码问题

按钮点击崩溃可能是ProdukActivity或PelangganActivity的内部逻辑出错(比如onCreate方法中空指针异常、布局资源引用错误等),表面是点击按钮崩溃,实际是目标Activity启动时触发异常。

解决:打开Android Studio的Logcat面板,过滤Error级别日志,找到对应的崩溃调用栈,定位Activity内部的具体问题并修复。

代码优化建议

原代码存在重复的OnClickListener实现,可以用Lambda表达式简化,减少冗余代码:

class BerandaFragment : Fragment() {

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        val v = inflater.inflate(R.layout.fragment_beranda, container, false)

        v.findViewById<Button>(R.id.btntransaksi)?.setOnClickListener {
            startActivity(Intent(activity, TransaksiActivity::class.java))
        }

        v.findViewById<Button>(R.id.btnproduk)?.setOnClickListener {
            startActivity(Intent(activity, ProdukActivity::class.java))
        }

        v.findViewById<Button>(R.id.btnpelanggan)?.setOnClickListener {
            startActivity(Intent(activity, PelangganActivity::class.java))
        }

        return v
    }
}

内容的提问来源于stack exchange,提问作者Dyni15

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 05:55:16