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
相关产品推荐
相关产品推荐

