在FloatingActionButton.Behavior中重写方法时,Android名称会发生冲突

本文关键字:冲突 Android Behavior FloatingActionButton 重写 方法 | 更新日期: 2023-09-27 18:05:02

我正在使用支持设计库在我的应用程序中实现FAB,并按照本指南添加滚动时消失/重新出现的行为。我已经转换ScrollAwareFABBehavior类提供给c#,但我得到以下编译器错误。

error: name clash: onStartNestedScroll(CoordinatorLayout,View,View,View,int) in ScrollAwareFABBehavior and onStartNestedScroll(CoordinatorLayout,V,View,View,int) in Behavior have the same erasure, yet neither overrides the other
public boolean onStartNestedScroll (android.support.design.widget.CoordinatorLayout p0, android.view.View p1, android.view.View p2, android.view.View p3, int p4)
where V is a type-variable:
V extends View declared in class Behavior Project.Droid E:'VS Projects'Project'Project.Droid'obj'Debug'android'src'md5fa22044078b50743372e010f51d93dc4'ScrollAwareFABBehavior.java

下面是转换后的类:

public class ScrollAwareFABBehavior : FloatingActionButton.Behavior
{
    public ScrollAwareFABBehavior(Context context, IAttributeSet attrs) {
    }
    public override bool OnStartNestedScroll(CoordinatorLayout coordinatorLayout, Java.Lang.Object child, View directTargetChild, View target, int nestedScrollAxes) {
        return nestedScrollAxes == ViewCompat.ScrollAxisVertical ||
            base.OnStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
    }
    public override void OnNestedScroll(CoordinatorLayout coordinatorLayout, Java.Lang.Object child, View target, int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed) {
        base.OnNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);
        var fab = (FloatingActionButton)child;
        if (dyConsumed > 0 && fab.Visibility == ViewStates.Visible) {
            fab.Hide();
        } else if (dyConsumed < 0 && fab.Visibility != ViewStates.Visible) {
            fab.Show();
        }
    }
}

我不知道为什么我得到这个错误,因为我只是从基类重写两个方法,这是我做错了还是Xamarin Android中的错误?我创建了一个要点,展示了在Visual Studio中双击错误时显示的Java代码,

在FloatingActionButton.Behavior中重写方法时,Android名称会发生冲突

您应该能够通过使用父类CoordinatorLayout.Behavior而不是FloatingActionButton.Behavior来解决这个问题:

https://developer.android.com/reference/android/support/design/widget/CoordinatorLayout.Behavior.html

我已经在这个问题上提交了一个bug:

https://bugzilla.xamarin.com/show_bug.cgi?id=34777

你应该注意的另一件事是要么注册类扩展CoordinatorLayout.Behavior或(这是我所做的)在你的xml文件中声明你的浮动动作按钮你应该写这样的东西:

<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_width="wrap_content"
    app:fabSize="normal"
    app:layout_behavior="md566409b1cfad53f1139d359f4a87074d2.ScrollAwareFABBehavior"
    android:layout_height="wrap_content"
    app:backgroundTint="#3f51b5"
    android:layout_gravity="bottom|end"
    android:layout_marginRight="8dp"
    android:layout_marginBottom="8dp"
    android:src="@drawable/floating_arrow" />

注意属性layout_behavior。您的类名之前的字符串在您的项目文件夹中的位置obj/debug/android/src中找到,然后检查所有具有类似名称的文件夹,如这里的文件夹,以查看哪一个包含您的ScrollAwareFABBehavior类。