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

如何从含CardView的Fragment跳转至另一Fragment?报错解决

解决点击CardView跳转Fragment时的IllegalStateException错误

问题根源

你在布局的RelativeLayout中设置了android:onClick="Cocktails",但Android会自动在宿主Activity中寻找同名的Cocktails(View)方法,而你并未在Activity中定义该方法;同时你又在Fragment里给CardView绑定了点击监听,两种点击逻辑叠加触发了报错。


解决方案

方法一:移除布局中的android:onClick属性(推荐)

直接删除RelativeLayout上的点击属性,保留Fragment内的点击逻辑即可,这也符合Fragment逻辑内聚的设计原则。

修改后的布局代码:

<androidx.cardview.widget.CardView
    android:id="@+id/cvCocktails"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    app:cardCornerRadius="15dp"
    app:cardElevation="0dp"
    app:layout_columnWeight="1"
    app:layout_rowWeight="1"
    >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:id="@+id/ivCocktails"
            android:layout_width="115dp"
            android:layout_height="115dp"
            android:layout_centerInParent="true"
            android:contentDescription="@string/cocktail"
            android:src="@drawable/cocktail_color"
            android:translationY="-15dp"
            tools:ignore="VisualLintBounds" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/ivCocktails"
            android:layout_centerHorizontal="true"
            android:text="@string/cocktail"
            android:textSize="20dp"
            tools:ignore="SpUsage,TextSizeCheck" />
    </RelativeLayout>
</androidx.cardview.widget.CardView>

方法二:在宿主Activity中定义Cocktails(View)方法(不推荐)

如果一定要保留布局中的android:onClick属性,需在Fragment对应的Activity中添加该方法,并把跳转逻辑移至其中:

public class MainActivity extends AppCompatActivity {
    // ...其他原有代码
    public void Cocktails(View view) {
        CocktailFragment cocktailFragment = new CocktailFragment();
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_home,cocktailFragment,null)
                .addToBackStack(null).commit();
    }
}

同时可以删除Fragment内的setOnClickListener代码,避免重复触发逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 18:15:59