к сожалению, это невозможно с использованием "classi c" View
s, например ScrollView
и GridView
- в некоторые дни go Android вообще не был подготовлен для вложенной прокрутки ... вы можете попробуйте перенести GridView
на какой-нибудь пользовательский NestedGridView
теоретически, но я бы посоветовал преобразовать GridView
в RecyclerView
с GridLayoutManager
- текущая версия RecyclerView
поддерживает wrap_content
для высоты и намного более гибкая, вы легко запретите прокрутку для этого View
, сохраняя весь ScrollView
контейнер с возможностью прокрутки
ниже фрагмент не работает, потому что вы возвращаете true
при возникновении ACTION_MOVE
. это значение true
означает «да, я уже обработал этот ход, не отправляйте его дальше» - GridView
тогда ничего не делает, но возвращает true
, поэтому ACTION_MOVE
никогда не будет отправлен и получен / обработан ScrollView
@Override
public boolean onTouch(View v, MotionEvent event) {
return event.getAction() == MotionEvent.ACTION_MOVE;
}
редактировать: есть также возможность для отправки касания (методы onInterceptTouchEvent
, dispatchTouchEvent
и аналогичные) - это будет сложно и сложно передать касание в вашем случае (один свиток внутри второго свитка) , но, возможно, стоит попробовать, если у вас очень сложный адаптер для GridView
, отредактируйте комментарий:
замените объявление GridView
XML на это:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/wheel"
android:layout_marginStart="90dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="90dp" />
android:numColumns="5"
строка удалена, это будет объявлено GridLayoutManager
в коде
int numColumns = 5;
recyclerView.setLayoutManager(new GridLayoutManager(this, numColumns));
вам нужно отредактировать ваш адаптер, теперь он должен extends RecyclerView.Adapter<GridAdapter.GridViewHolder>
. подробнее об этом адаптере ЗДЕСЬ