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

Android中CardView点击跳转Activity时应用崩溃问题求助

问题:点击CardView跳转Activity时应用崩溃

我用以下布局代码实现了搜索栏和带“添加”文本的CardView:

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_marginStart="10dp"
    android:layout_weight="0.7"
    android:background="@drawable/round_rectangle"
    android:orientation="horizontal">

    <ImageView
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_gravity="center_vertical"
        android:layout_marginStart="10dp"
        android:src="@drawable/ic_search"
        app:tint="@color/gray" />

    <EditText
        android:id="@+id/edt_search"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginStart="10dp"
        android:layout_marginEnd="10dp"
        android:background="@android:color/transparent"
        android:fontFamily="@font/spartan_medium"
        android:gravity="center_vertical"
        android:textSize="18sp"
        android:textStyle="normal" />
</LinearLayout>

<androidx.cardview.widget.CardView
    android:id="@+id/cardAddAccount"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_marginStart="10dp"
    android:layout_marginEnd="5dp"
    android:layout_weight="0.3"
    android:orientation="horizontal"
    android:clickable="true"
    app:cardBackgroundColor="@color/solitude"
    app:cardCornerRadius="5dp"
    app:cardElevation="0dp">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="center"
        android:fontFamily="@font/spartan_semibold"
        android:gravity="center"
        android:text="@string/home_btn_add"
        android:textColor="@color/dodgerBlue"
        android:textSize="14sp"
        android:textStyle="italic" />

</androidx.cardview.widget.CardView>

布局效果为:左侧是带搜索图标的圆角输入框,右侧是灰色背景、蓝色“添加”文字的可点击CardView。

在HomeActivity.java中我编写了点击跳转代码:

CardView cardView = findViewById(R.id.cardAddAccount);
if (cardView != null) {
    cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // 点击时启动AddAccountActivity
            Intent i = new Intent(HomeActivity.this, AddAccountActivity.class);
            startActivity(i);
        }
    });
}

现在点击该CardView时应用崩溃,求解决办法。


解决方案
  • 检查AddAccountActivity的Manifest注册
    Android要求所有Activity必须在AndroidManifest.xml中声明,未注册会直接抛出ActivityNotFoundException导致崩溃。在<application>标签内添加以下代码:

    <activity
        android:name=".AddAccountActivity"
        android:exported="true" />
    

    注:如果你的项目targetSdkVersion >= 31,必须添加android:exported属性。

  • 消除子View的点击事件冲突
    CardView内部的TextView默认可能抢占点击事件,导致CardView的点击监听器无法触发。给TextView添加以下属性,确保点击事件传递到CardView:

    <TextView
        ...
        android:clickable="false"
        android:focusable="false" />
    
  • 查看崩溃日志定位具体原因
    打开Android Studio的Logcat面板,过滤Error级别日志,查看崩溃的堆栈信息。常见原因包括:

    • AddAccountActivity未注册
    • AddAccountActivity的onCreate方法中有错误代码(比如空指针、资源引用错误)
    • 上下文引用异常(比如在非UI线程初始化视图,但你的代码不存在此问题)
  • 分步测试验证
    先将跳转代码替换为Toast,验证CardView的点击事件是否正常触发:

    cardView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Toast.makeText(HomeActivity.this, "CardView已点击", Toast.LENGTH_SHORT).show();
        }
    });
    

    如果Toast正常显示,说明问题出在AddAccountActivity的启动或内部逻辑;如果仍崩溃,需检查CardView的初始化是否正确(比如布局中ID是否匹配)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:05:02