Android Tablayout遇到IncompatibleClassChangeError異常

最近項目中使用Tablayout監聽tab切換事件的時候遇到如下問題:

java.lang.IncompatibleClassChangeError: Class 'xxx.RobotDetailActivity' does not implement interface 'com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener' in call to 'void com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener.onTabUnselected(com.google.android.material.tabs.TabLayout$Tab)' 

先說說我的解決方案,將“new TabLayout.OnTabSelectedListener()”換成“new TabLayout.BaseOnTabSelectedListener()”。

最近項目中遇到一個需要單獨使用tablayout的場景,於是乎就開始擼碼,
 佈局:

  <com.google.android.material.tabs.TabLayout
                    android:id="@+id/tabs_tobots"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:background="@drawable/background_white_bottom_line"
                    android:minHeight="40dp"
                    app:tabBackground="@color/transparent"
                    app:tabIndicatorColor="@color/tab_indicator"
                    app:tabIndicatorFullWidth="false"
                    app:tabMode="scrollable"
                    app:tabRippleColor="@color/transparent"
                    app:tabSelectedTextColor="@color/tab_selected_text_blue"
                    app:tabTextColor="@color/main_gray" />

事件:

  viewDataBinding.tabsTobots.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                showToast("  "+tab.getText());
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

調試:

。。。。。。。。。。。。。。
    
    App崩潰!!!不是吧,一個tablayout也會崩,查看了日誌,發現:

java.lang.IncompatibleClassChangeError: Class 'xxx.RobotDetailActivity' does not implement interface 'com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener' in call to 'void com.google.android.material.tabs.TabLayout$BaseOnTabSelectedListener.onTabUnselected(com.google.android.material.tabs.TabLayout$Tab)' 

。。。
    大致意思是:你要調用BaseOnTabSelectedListener.onTabUnselected方法但是你沒實現BaseOnTabSelectedListener接口
    重點:BaseOnTabSelectedListener
    帶着疑惑,點開OnTabSelectedListener,看到代碼:

 public interface OnTabSelectedListener extends TabLayout.BaseOnTabSelectedListener<TabLayout.Tab> {
    }

    public interface BaseOnTabSelectedListener<T extends TabLayout.Tab> {
        void onTabSelected(T var1);

        void onTabUnselected(T var1);

        void onTabReselected(T var1);
    }

OnTabSelectedListener 繼承了BaseOnTabSelectedListener的呀,完全沒問題呀,肯定是編譯器又抽風了,
    於是乎將監聽方法改爲BaseOnTabSelectedListener,

 viewDataBinding.tabsTobots.addOnTabSelectedListener(new TabLayout.BaseOnTabSelectedListener() {
            @Override
            public void onTabSelected(TabLayout.Tab tab) {
                showToast("  "+tab.getText());
                ChangeVideo();
            }

            @Override
            public void onTabUnselected(TabLayout.Tab tab) {

            }

            @Override
            public void onTabReselected(TabLayout.Tab tab) {

            }
        });

    打包,測試,ok了!
    此問題還沒找到原因,希望有大佬知道的話幫忙解答,感激不盡!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章