Я хочу внедрить вложенную прокрутку материала для моего адаптера, который extends AdapterView
.Вложенная прокрутка и AdapterView
Проблема заключается в том AdapterView
поддерживает setNestedScrollingEnabled
только с API 21 и мой минимум 15. Есть ViewGroupCompat
и даже AdapterViewCompat
, что теоретически может помочь мне повторно реализовать свой адаптер с чем-то вроде extends AdapterViewCompat
, но они непригодны в качестве AdapterViewCompat
является внутренний и ViewGroupCompat
... final
(почему ?!)
Stealmate? Или есть решение?
OK, поэтому ... более подробно.
Поскольку я использую (X, Y) вместо стандартного линейного адаптера, это было удобно, чтобы создать лучший интерфейс (может быть разное количество крестиков на каждый Y, так что ...):
public interface MatrixAdapterInterface extends Adapter {
int getRowCount();
int getColCount(int row);
Object getItem(int row, int col);
View getView(int row, int col, View convertView, ViewGroup parent);
boolean isEmpty();
}
Это, конечно, требовал AdapterView
, который способен обрабатывать (X, Y) индексацию (отображение (X, Y) в линейную природу ViewGroup
), не стоит перечислить в целом здесь:
public abstract class MatrixAdapter<T extends MatrixAdapterInterface>
extends AdapterView<T> {
....
}
И наконец, макет, который использует это AdapterView
, и это не означает, т передавать любые вложенные события прокрутки:
public class XenoMatrixLayout extends
MatrixAdapter<SomeMatrixAdapterInterface implementation> {
}
Теперь ... потрогать обработка немного сложным ... Во-первых, есть:
@Override
public boolean dispatchTouchEvent(final MotionEvent ev) {
boolean handled = onTouchEvent(ev);
if (handled)
return true;
if (ev.getPointerCount() == 2)
processDoubleTouchEvent(ev);
handled = mGesture.onTouchEvent(ev);
return handled;
}
Тогда ты:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (mFastScroller != null) {
boolean intercepted = mFastScroller.onInterceptTouchEvent(ev);
if (intercepted) {
return true;
}
}
return false;
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if (mFastScroller != null) {
boolean intercepted = mFastScroller.onTouchEvent(ev);
if (intercepted) {
return true;
}
}
return false;
}
Все больше вам нужно знать?
Позвольте мне попробовать и разобраться. Я дам более подробную информацию, если я безнадежно застрял! Спасибо за оба ответа! Хорошо, может, я сделаю это сейчас ... – ssuukk