Класс ViewGroup
имеет метод с именем onInterceptTouchEvent(ev: MotionEvent)
, который возвращает значение Boolean
. Если вы хотите, чтобы ваш взгляд «украл» сенсорное событие, вы должны вернуть true и false в противном случае.
Например, если вы хотите, чтобы представление вашего рециркулятора прокручивалось только вертикально, вам необходимо переопределить onInterceptTouchEvent(ev: MotionEvent)
в вашем классе ViewPager
и определить тип прокрутки.
Это будет выглядеть так:
class MyViewPager {
override fun onInterceptTouchEvent(ev: MotionEvent): Boolean =
!isVerticalScroll()
}
Метод isVerticalScroll()
должен быть создан вами и возвращать текущее направление прокрутки.
Поэтому, когда вы проведете пальцем по горизонтали, вы попадете к следующему фрагменту. В то же время ваш вид переработчика будет прокручиваться вертикально, и никаких конфликтов не возникнет.
StringBuilder
NotInheritable
(иначе sealed
в C#), таким образом, Вы не можете произойти из него. Вы могли попытаться перенестись StringBuilder
в Вашем собственном классе или рассматривают использование дополнительных методов вместо этого.
Нет, StringBuilder является классом NotInheritable. Вы могли попытаться перенести экземпляр StringBuilder, но не можете наследоваться ему. Можно также использовать дополнительные методы при использовании.NET 3.5.
Это - то, что я придумал для тех, кому любопытно:
Imports System.Runtime.CompilerServices
Module sbExtension
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal arg0 As Object)
oStr.AppendFormat("{0}{1}", String.Format(format, arg0), ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, ByVal arg0 As Object, _
ByVal arg1 As Object)
oStr.AppendFormat("{0}{1}", String.Format(format, arg0, arg1), ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal arg0 As Object, _
ByVal arg1 As Object, _
ByVal arg2 As Object)
oStr.AppendFormat("{0}{1}", String.Format(format, arg0, arg1, arg2), ControlChars.NewLine)
End Sub
<Extension()> _
Public Sub AppendFormattedLine(ByVal oStr As System.Text.StringBuilder, _
ByVal format As String, _
ByVal ParamArray args() As Object)
oStr.AppendFormat("{0}{1}", String.Format(format, args), ControlChars.NewLine)
End Sub
End Module
StringBuilder изолируется. Вы не можете наследоваться ему.
StringBuilder является запечатанным классом..., таким образом, наследование не позволяется.
При использовании более ранней версии .NET можно записать в основном тот же класс StringBuilderExtensions и затем явно назвать статический метод вместо этого.
С.Net 3.5: myStringBuilder.MyExtensionMethod(etc...);
Пред-.Net 3.5: StringBuilderExtensions.MyExtensionMethod(myStringBuilder, etc...);