Para o meu aplicativo, estou usando um RecyclerView
dentro de um local ScrollView
onde RecyclerView
tem uma altura com base em seu conteúdo usando esta biblioteca . A rolagem está funcionando, mas não está funcionando perfeitamente quando eu rolar a tela RecyclerView
. Quando eu rolar sobre o ScrollView
próprio, ele está rolando sem problemas.
O código que estou usando para definir RecyclerView
:
LinearLayoutManager friendsLayoutManager = new LinearLayoutManager(getActivity().getApplicationContext(), android.support.v7.widget.LinearLayoutManager.VERTICAL, false);
mFriendsListView.setLayoutManager(friendsLayoutManager);
mFriendsListView.addItemDecoration(new DividerItemDecoration(getActivity().getApplicationContext(), null));
O RecyclerView
no ScrollView
:
<android.support.v7.widget.RecyclerView
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:id="@+id/friendsList"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
android
android-recyclerview
android-scrollview
android-scroll
Bart Bergmans
fonte
fonte
androidx.constraintlayout.widget.ConstraintLayout
o que vai resolver seu problema sem qualquer implementações complexasRespostas:
Tente fazer:
Como alternativa, você pode modificar seu layout usando a biblioteca de design de suporte. Eu acho que seu layout atual é algo como:
Você pode modificar isso para:
No entanto, esse é um caminho mais longo e, se você estiver de acordo com o gerenciador de layout linear personalizado, desative a rolagem aninhada na visualização do reciclador.
Editar (03/04/2016)
O
v 23.2
lançamento das bibliotecas de suporte agora inclui um recurso de "wrap wrap" de fábrica em todos osLayoutManager
s padrão . Não testei, mas você provavelmente deve preferir à biblioteca que estava usando.fonte
setNestedScrollingEnabled(false)
só funcionou quando troquei oScrollView
for a peloNestedScrollView
contrário.setNestedScrollingEnabled(false)
me devolveu a rolagem suave com meuRecyclerView
interior de umScrollView
- Obrigado! Mas ainda não entendo por que isso funciona ...? O que realmente significa definir a rolagem aninhada como falsa?android:nestedScrollingEnabled="false"
funciona apenas para a API 21+, masv.setNestedScrollingEnabled(false)
é aceitável para <21.RecyclerView
um problema wrap_content no interiorScrollView
que só acontece em dispositivos marshmallow / nougat (API 23, 24), verifique minha solução alternativa em stackoverflow.com/a/38995399/132121Eu só precisava usar isso:
no meu
onCreateView()
métodoMuito obrigado!
fonte
Você pode usar desta maneira:
Adicione esta linha ao seu arquivo xml do recyclerView:
Ou no código java:
Espero que isso tenha ajudado.
fonte
Você pode tentar com as duas formas com XML e programaticamente. Mas o problema que você pode enfrentar é (abaixo da API 21) fazê-lo com XML não funcionará. Portanto, é melhor configurá-lo programaticamente em sua Atividade / Fragmento.
Código XML:
Programaticamente:
fonte
Usar a Visualização de rolagem aninhada em vez da Visualização de rolagem resolveu meu problema
fonte
Eu tive problemas semelhantes (tentei criar um RecyclerViews aninhado, algo como o design do Google PlayStore). A melhor maneira de lidar com isso é subclassificando o filho RecyclerViews e substituindo os métodos 'onInterceptTouchEvent' e 'onTouchEvent'. Dessa forma, você obtém controle completo de como esses eventos se comportam e, eventualmente, rolam.
fonte
Substituir ScrollView por NestedScrollView resultou em rolagem suave para a parte inferior.
fonte
Se você estiver usando o VideoView ou widgets de peso pesado em suas visualizações de crianças, mantenha o RecyclerView com altura
wrap_content
dentro de um NestedScrollView com altura. Amatch_parent
rolagem funcionará perfeitamente da maneira que você desejar.PARA SUA INFORMAÇÃO,
Graças à Micro, esta foi a sua dica!
Karthik
fonte
Resumo de todas as respostas (Vantagens e Desvantagens)
Para uma única visão de reciclagem
você pode usá-lo dentro do layout do coordenador.
Vantagem - não carregará itens inteiros de reciclagem. Carregamento tão suave.
Desvantagem - você não pode carregar duas visualizações de reciclagem dentro do layout do Coordinator - produz problemas de rolagem
referência - https://stackoverflow.com/a/33143512/3879847
Para várias recylerview com linhas mínimas
você pode carregar dentro do NestedScrollView
Vantagem - rolará suavemente
Desvantagem - Carrega todas as linhas da visão de reciclagem para que sua atividade seja aberta com atraso
referência - https://stackoverflow.com/a/33143512/3879847
Para várias recylerview com linhas grandes (mais de 100)
Você deve ir com a reciclagem.
Vantagem - role sem problemas, carregue sem problemas
Desvantagem - Você precisa escrever mais código e lógica
Carregue cada recylerview dentro da recyclerview principal com a ajuda de vários participantes
ex:
Referência para multi-viewHolder - https://stackoverflow.com/a/26245463/3879847
fonte
Código XML:
no código java:
fonte
Ou você pode simplesmente definir
android:focusableInTouchMode="true"
na sua visualização do recicladorfonte
Este código está funcionando no ConstraintLayout android
fonte
Kotlin
Defina
isNestedScrollingEnabled
comofalse
para cada RecyclerView que está sob a exibição de rolagemUsando layout XML
fonte