2015-07-28 1 views
2

Я реализую FAB в своем приложении с использованием библиотеки дизайна поддержки и после this guide, чтобы добавить исчезновение/повторное появление при прокрутке. Я преобразовал класс ScrollAwareFABBehavior, предоставленный C#, но я получаю следующую ошибку компилятора.Xamarin Android name collash при переопределении методов в FloatingActionButton.Behton

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? Я создал a gist показывая код Java, который отображается при двойном нажатии ошибки в Visual Studio,

+0

Интересно, что переопределение C# имеет тип Java.Lang.Object для параметра child, тогда как версия Java использует тип View. – Kiliman

ответ

0

Вы должны быть в состоянии пройти это с помощью родительского класса CoordinatorLayout.Behavior вместо FloatingActionButton.Behavior:

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

Я пошел вперед и подал ошибку по этому вопросу до поры до времени:

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

0

Другого дела, что вы должны позаботиться о том, чтобы либо зарегистрировать класс, который будет распространяться 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.

Смежные вопросы