使用com.android在setOnTabSelectedListener上崩溃。支持:设计:28.0.0

使用com.android在setOnTabSelectedListener上崩溃。支持:设计:28.0.0,android,android-tablayout,androiddesignsupport,Android,Android Tablayout,Androiddesignsupport,我正在使用一个类库来扩展TabLayout。我正在尝试使用最新的支持库进行构建: implementation 'com.android.support:appcompat-v7:28.0.0' implementation 'com.android.support:design:28.0.0' implementation 'com.android.support:preference-v14:28.0.0' implementation 'com.android.support:suppor

我正在使用一个类库来扩展TabLayout。我正在尝试使用最新的支持库进行构建:

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'
implementation 'com.android.support:preference-v14:28.0.0'
implementation 'com.android.support:support-v13:28.0.0'
这将导致崩溃:

java.lang.NoSuchMethodError: No virtual method setOnTabSelectedListener(Landroid/support/design/widget/TabLayout$OnTabSelectedListener;)
这是来自反编译的
TabLayout.class
文件的源代码(它似乎不像其他版本那样有一个源jar):

我正在用三星Galaxy S8-API26-1440x2960运行Genymotion

我不确定设计是否有问题:28.0.0库,或者我只是在构建中做错了什么。它似乎可以与早期版本配合使用。任何建议都将不胜感激

/**
 * @deprecated Use {@link #addOnTabSelectedListener(OnTabSelectedListener)} and
 * {@link #removeOnTabSelectedListener(OnTabSelectedListener)}.
 */
它是在API级别
26.1.0
中,也许这就是为什么会出现此错误

要解决此问题,请使用而不是

参考

示例代码:

tablayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager));
viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tablayout));

请注意,不要使用折旧方法。

您应该使用新的材料组件依赖项。有了这一行,一切正常,只需在Gradle中添加一行即可导入所有设计组件

implementation 'com.google.android.material:material:1.0.0'
有了这一行依赖项,RecyclerView、CardView、TableLayout和所有视图组件都可以使用。您还将拥有芯片、CardView、RecyclerView和tec

记住:

您不应该使用com.android.support和 同时在应用程序中添加com.google.android.material依赖项


在这里查看如何设置:

我从两个版本下载了AAR文件:和:

从两个包中反编译TabLayout.class,我可以看到它的签名已从:

27.1.1

@Deprecated
public void setOnTabSelectedListener(@Nullable TabLayout.BaseOnTabSelectedListener listener)
}
28.0.0

@Deprecated
public void setOnTabSelectedListener(@Nullable TabLayout.OnTabSelectedListener listener) {
}
因此,现在,该方法需要的是
BaseOnTabSelectedListener
,而不是
OnTabSelectedListener

旧的
onTabSelectedListener
不实现新的
BaseOnTabSelectedListener

因此,可能还必须导入material组件,该组件具有新的
OnTabSelectedListener实现:

implementation 'com.google.android.material:material:1.0.0'
onTabSelectedListener
(不实现
BaseOnTabSelectedListener

onTabSelectedListener
(实现
BaseOnTabSelectedListener


很抱歉,我没有直接演示如何修复它,因为我现在无法继续。但这是我猜的根本原因。

尝试使用
addOnTabSelectedListener(OnTabSelectedListener)
而不是
setOnTabSelectedListener(…)
谢谢,但调用不在我的代码中。它在我使用的框架中-ResearchStack.square.Doc没有提到它已被删除。我从(AAR)反编译了该类文件和该方法仍然存在…它已被弃用..未被删除。这实际上并没有回答主要问题。谢谢。我认为如果我正在编写该类,该解决方案以及使用AddOnAbsSelectedListener将起作用;但是,我使用的是一个由框架实现的类:公共类IconTabLayout扩展了android.support.design.widget。TabLayout和material:1.0.0提供了com.google.android.material.tabs.TabLayout,除非我感到困惑,否则它不会帮助我。
@Deprecated
public void setOnTabSelectedListener(@Nullable TabLayout.OnTabSelectedListener listener) {
}
implementation 'com.google.android.material:material:1.0.0'