Как сделать смежные элементы в Recycler View частично видимыми?

React Router v4

С v4 React Router существует три подхода, которые вы можете предпринять для программной маршрутизации внутри компонентов.

  1. Используйте withRouter компонент более высокого порядка.
  2. Используйте композицию и выведите
  3. Используйте context.

Реагируйте Маршрутизатор в основном является оберткой вокруг библиотеки history . history взаимодействует с браузером window.history для вас с его браузером и историями хэша. Он также обеспечивает историю памяти, которая полезна для сред, которые не имеют глобальной истории. Это особенно полезно в разработке мобильных приложений (react-native) и модульном тестировании с помощью узла.

Экземпляр history имеет два способа навигации: push и replace. Если вы думаете о history как о массиве посещенных мест, push добавит новое место в массив, а replace заменит текущее местоположение в массиве новым. Обычно вы будете использовать метод push во время навигации.

В более ранних версиях React Router вам нужно было создать свой собственный экземпляр history, но в v4 , и будут созданы для вас браузер, хэш и экземпляры памяти. React Router делает свойства и методы экземпляра history, связанные с вашим маршрутизатором, доступными через контекст под объектом router.

1. Используйте withRouter компонент более высокого порядка

код withRouter высшего порядка компонент будет впрыскивать history объект в качестве опоры компонента. Это позволяет вам получить доступ к методам push и replace, не имея дело с context.

import { withRouter } from 'react-router-dom'
// this also works with react-router-native

const Button = withRouter(({ history }) => (
  
))

2. Используйте композицию и рендерите

Компонент предназначен не только для сопоставления местоположений. Вы можете сделать беспроблемный маршрут, и он всегда будет соответствовать текущему местоположению. Компонент передает те же реквизиты, что и withRouter, поэтому вы сможете получить доступ к history методам с помощью history prop.

import { Route } from 'react-router-dom'

const Button = () => (
   (
    
  )} />
)

3. Используйте контекст *

* Но вы, вероятно, не должны

Последний вариант - это тот, который вы должны использовать, только если вам комфортно работать с моделью context React] , Хотя контекст является опцией, следует подчеркнуть, что контекст является нестабильным API, и в React есть раздел «Почему бы не использовать контекст в своей документации. Поэтому используйте на свой страх и риск!

const Button = (props, context) => (
  
)

// you need to specify the context type so that it
// is available within the component
Button.contextTypes = {
  history: React.PropTypes.shape({
    push: React.PropTypes.func.isRequired
  })
}

1 и 2 являются простейшими вариантами для реализации, поэтому для большинства случаев использования они являются вашими лучшими ставками.

3
задан Gourav 2 March 2019 в 06:39
поделиться

1 ответ

Вы можете использовать библиотеку RecyclerViewPager , в build.gradle добавить:

compile 'com.github.lsjwzh.RecyclerViewPager: lib: v1.2.0@aar'

[119 ] xml:

<com.lsjwzh.widget.recyclerviewpager.RecyclerViewPager
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    app:rvp_triggerOffset="0.1"
    app:rvp_singlePageFling="true"
    android:clipToPadding="false"/>

код:

RecyclerViewPager mRecyclerView = (RecyclerViewPager) view.findViewById(R.id.list);

// setLayoutManager like normal RecyclerView, you do not need to change any thing.
LinearLayoutManager layout = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
mRecyclerView.setLayoutManager(layout);

//set adapter
//You just need to implement ViewPageAdapter by yourself like a normal RecyclerView.Adpater.
mRecyclerView.setAdapter(new RecyclerView.Adpater<X>());

// That is all.

Обновление

Добавьте это maven { url "https://jitpack.io" } в build.gradle (уровень проекта) в allprojects->repositories блок, ваш код должен выглядеть так:

allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }
    }
}
0
ответ дан Suraj Vaishnav 2 March 2019 в 06:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: