我有一个EndlessRecyclerView结束了NestedScrollView.EndlessRecyclerView表示:当用户滚动到recyclerView的底部时,它会加载更多数据.这是已经实现的和其他地方的工作,但是当我把recyclerView内部NestedScrollView的OnScrollListener事件不火.
XML设计:
<NestedScrollView>
<Other views/>
<EndlessRecyclerView/>
</NestedScrollView >
Run Code Online (Sandbox Code Playgroud)
码:
recyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// This is never fired! Here is where I implement the logic of EndlessRecyclerView
}
});
Run Code Online (Sandbox Code Playgroud)
如何获得上述案例的滚动事件?
我知道在彼此内部有两个可滚动视图并不好.但是,如果没有两个可滚动的视图,我怎么能有上述情况呢?
我已经按照这个链接但它不起作用:scrollview android里面的recyclelerview滚动事件
android infinite-scroll onscrolllistener android-recyclerview android-nestedscrollview
好的,下面的代码"工作",当你滚动到页面底部时,AJAX函数被触发,结果被附加到页面上的#postswrapper div.
问题是:如果我到达页面底部时滚动非常快,AJAX会多次触发并将几组结果加载到#postswrapper div中(附加数量,"不需要的"结果取决于多少额外滚动通过快速滚动来触发事件).
最终,每次用户到达底部时,我只需要提供一组结果.我试过添加计时器等,但无济于事.它显然是在DOM中存储额外的滚动动作,然后按顺序触发它们.
有任何想法吗?
我正在使用jquery.1.4.4.js,如果这有助于任何人.无论如何,在这种情况下,e.preventDefault()不起作用.
$(window).scroll(function(e) {
e.preventDefault();
if ($(window).scrollTop() >= ($(document).height() - $(window).height())) {
$('div#loadmoreajaxloader').show();
$.ajax({
cache: false,
url: 'loadmore.php?lastid=' + $('.postitem:last').attr('id'),
success: function(html) {
if (html) {
$('#postswrapper').append(html);
$('div#loadmoreajaxloader').hide();
} else {
$('div#loadmoreajaxloader').html();
}
}
});
}
});
Run Code Online (Sandbox Code Playgroud) 我rvest在R中用来做一些刮擦.我知道一些HTML和CSS.
我想获得URI的每个产品的价格:
http://www.linio.com.co/tecnologia/celulares-telefonia-gps/
当您在页面上下载时,新项目会加载(当您进行一些滚动时).
到目前为止我做了什么:
Linio_Celulares <- html("http://www.linio.com.co/celulares-telefonia-gps/")
Linio_Celulares %>%
html_nodes(".product-itm-price-new") %>%
html_text()
Run Code Online (Sandbox Code Playgroud)
我得到了我需要的东西,但仅仅是25个第一个元素(默认加载).
[1] "$ 1.999.900" "$ 1.999.900" "$ 1.999.900" "$ 2.299.900" "$ 2.279.900"
[6] "$ 2.279.900" "$ 1.159.900" "$ 1.749.900" "$ 1.879.900" "$ 189.900"
[11] "$ 2.299.900" "$ 2.499.900" "$ 2.499.900" "$ 2.799.000" "$ 529.900"
[16] "$ 2.699.900" "$ 2.149.900" "$ 189.900" "$ 2.549.900" "$ 1.395.900"
[21] "$ 249.900" "$ 41.900" "$ 319.900" "$ 149.900"
Run Code Online (Sandbox Code Playgroud)
问题:如何获取此动态部分的所有元素?
我想,我可以滚动页面,直到所有元素都被加载,然后使用html(URL).但这似乎很多工作(我计划在不同的部分这样做).应该有一个程序化的工作.
任何暗示都是受欢迎的!
我正在尝试使用RecyclerView实现Endless Infinite Scrolling,但是我只获得了前10条记录,没有获得接下来的10条记录,甚至在尝试向下滚动时没有取得任何进展.
虽然我想要在滚动上获得接下来的10条记录等等......但只获得前10条记录
这里我上传了我的JSON 副本 - 但我无法从同一个网址获取数据,这就是我使用客户端的网址和本地主机的原因.
我正在学习本教程
这是我的完整代码,我可以知道我在哪里做错了吗?
JSON:
{
"names": [
{
"name": "Name 1"
},
{
"name": "Name 2"
},
....
{
"name": "Name 60"
}
]
}
Run Code Online (Sandbox Code Playgroud)
日志:
D/name -(13759): Name 1
D/name -(13759): Name 2
.......................
D/name -(13759): Name 60
Run Code Online (Sandbox Code Playgroud)
这是我更新的代码,我用它来解析JSON数据
MainActivity.java:更新
public class MainActivity extends AppCompatActivity {
private Toolbar toolbar;
private TextView tvEmptyView;
private RecyclerView mRecyclerView;
private DataAdapter mAdapter;
private LinearLayoutManager mLayoutManager;
private ArrayList<Student> studentList;
protected Handler handler;
@Override
protected void …Run Code Online (Sandbox Code Playgroud) android json infinite-scroll endlessscroll android-recyclerview
通过阅读一些相关的问题,我意识到$.affix('refresh')twitter bootstrap词缀组件根本没有可用的方法 - 我的问题虽然相关,但可能只是刷新之间的一个额外步骤,让我试着解释一下.
我有一个标准bootstrap导航栏的页面.在我的情况下,当用户滚动超过x像素时,我将在其下方添加"引脚"的子导航(在我的情况下,导航栏的高度为41px,所以在41px时,词缀开始并通过将.affix类更改为.affix {top:41px}all) )
因此,对于第一个词缀,我可以使用仅限html的属性.
在页面的下方(本质上可以被认为是"第二页")我有另一条导航,一旦用户滚动到某个位置就应该"粘贴"并替换第一个子导航 - 假定第二个导航的位置页面/词缀是可变的,因为内容我使用js来计算第一页的高度,并offset: {top:xxx}根据我得到的内容进行设置.
这也很好/正如预期的那样,用户向下滚动一点,第一个子导航词缀开始,如果他继续滚动并到达第二个子导航进一步向下页面它踢,并替换第一个词缀的子-nav(它实际上并不替换它本身,而是覆盖更高的z-index)
从这里开始,我有两个问题,我无法找到解决方案:
当用户重新调整窗口大小时,第一页的内容当然会变得更长,这会改变页面上的词缀的原始偏移顶部尺寸.首先,我认为简单的调用.affix('refresh')将是/可能是解决方案,但当然这个方法在组件上甚至不可用.接下来,我想我可以再次手动重新计算高度并重新创建$('.my-second-affix').affix({offset: {top:x-new-offset}});- 但由于某种原因,这似乎根本不起作用,我无法弄清楚为什么:(
接下来要解决的问题是我还在使用jquery infinitescroll来加载越来越多的页面...每个页面可能有不同阶段的其他子导航,我想加贴并替换现在最后一个词缀在顶部.
注意我还想确保如果用户向后滚动另一个方向,以前附加的子导航将重新附加自己向后移动(我怀疑只要附加偏移是正确的,它们就会很好)
希望这个解释足以突出我的问题,有人要么已经处理过此问题,要么可以为解决方案提供一些指导.我试图让偏移量成为一个从顶部返回当前偏移量的函数(如另一个问题Twitter bootstrap更改词缀偏移量中所述),但由于某种原因,它也无法按预期工作.
任何帮助是极大的赞赏
这似乎是可能的,但我在确定如何实现ViewPager无限期页面时遇到一些麻烦.
我的用例是一个日历,一次显示一个月,但可以通过分页足够的时间切换到任何月份.
目前我只是extending PagerAdapter,并且MonthViews添加了3个自定义,如下所示:
@Override
public Object instantiateItem(View collection, int position) {
final MonthView mv = new MonthView(HistoryMonthActivity.this);
mv.setLayoutParams(new ViewSwitcher.LayoutParams(
android.view.ViewGroup.LayoutParams.MATCH_PARENT,
android.view.ViewGroup.LayoutParams.MATCH_PARENT));
mv.setSelectedTime(mTime);
((DirectionalViewPager) collection).addView(mv, 0);
return mv;
}
Run Code Online (Sandbox Code Playgroud)
我想一次只MonthView在内存中保存3 秒,这样MonthView当用户使用Tab键时,在每个数据库中显示数据都没有太大的延迟.因此,每次显示新页面时,我都需要删除一个MonthView并添加一个MonthView.如果有人对同样的功能有更好的想法,我很乐意听到它!
我正在考虑尝试使用FragmentStatePagerAdapter.
我在angularjs应用程序中滚动有问题.
目前它有2页:第一页是客户列表,您可以选择其中一个并查看其详细信息.第二个是公司列表,它的工作方式相同.
我正在使用面板在它们之间导航$location.path().该应用程序还有一个后退按钮,使用$window.history.back().
当您选择客户或公司列表中的某个项目,然后在按下该按钮后,您将返回到上一页(客户或公司列表)并恢复滚动位置.我正在使用标准$window.history.back()功能,没有实现任何自定义.
但这里出现问题:如果没有向任何方向滚动,只需转到另一个页面(到其他项目列表)滚动位置将不会重置.但如果你只是稍微滚动一下,它的位置就会重置.此外,如果你不使用后退按钮一切正常.
所以,问题是:在使用后转到另一页时我们如何重置滚动位置$window.history.back()?
我也使用infinite-scroll插件,如果重要的话.但即使我关闭它,没有任何改变,所以我猜问题不在于插件.
RecyclerView有一个InfiniteScrollListener并且在该侦听器中,在OnScrolled()方法I中计算可见项和总项数以检查是否应该加载新项.当totalItemCount和visibleItemCount相同时,它会导致无限循环加载.听众与我RecyclerView没有CoordinatorLayout或NestedScrollView作为父母的其他人完美无瑕地工作.我想保留这种结构,因为客户不会接受更改.
我在活动中有一个像这样的布局的片段
CoordinatorLayout{
NestedScrollView{
RecyclerView{
}
}
}
Run Code Online (Sandbox Code Playgroud)
compileSdkVersion 24
buildToolsVersion "23.0.3"
...
minSdkVersion 21
targetSdkVersion 24
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay"
app:layout_behavior="com.paxotic.paxira.util.behavior.AppBarFlingBehavior">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/toolbar_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/app_bar_height_small"
app:contentScrim="?attr/colorPrimary"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
app:layout_collapseMode="parallax">
<ImageView
android:id="@+id/img_background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:alpha="0.5"
android:scaleType="centerCrop"
tools:src="@drawable/bg_greeting_activity" />
</RelativeLayout>
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
<include
layout="@layout/activity_profile_content"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<android.support.design.widget.FloatingActionButton
... />
</android.support.design.widget.CoordinatorLayout>
Run Code Online (Sandbox Code Playgroud)
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" …Run Code Online (Sandbox Code Playgroud) 我使用react-infinite-scroll-component库进行分页,但即使hasMore为true,loadMore也会被调用一次。
<InfiniteScroll
dataLength={100}
pullDownToRefreshThreshold={50}
next={loadMoreConversation}
scrollableTarget="scrollableDiv"
hasMore={true}
loader={<h4>Loading...</h4>}
>
<ChatItemList
chatItems={chatItems}
isInDeleteMode={deleteActive}
onBottomDrawerHandler={onBottomDrawerHandler}
/>
</InfiniteScroll>
Run Code Online (Sandbox Code Playgroud)
请帮我解决这个问题,我做错了什么?
pagination infinite-scroll reactjs react-infinite-scroll-component react-pagination
当心!
Isotope的GitHub仓库还有待处理的功能请求问题,如果您有兴趣查看官方文档和演示(如何结合同位素,无限滚动,过滤和排序),您应该添加一个""反应.它由Isotope的创造者打开以衡量兴趣.如果有兴趣,请upvote!
TL; DR:为了帮助获得官方文档和演示,请转到此处并添加""反应.
尝试使用Isotope JS插件和Paul Irish(可悲的是未维护的)Infinite Scroll插件拼凑出可过滤的布局.
过滤有点工作.最初它过滤第1页内容.为了过滤不在页面1上的项目,我需要向下滚动(我想这是将元素带入浏览器的内存中,从而使其可用于过滤脚本?)
通过一组初始页面内容的选择框(即:第1页的内容).
问题1: 如何让过滤器适用于所有页面项?ie:如何引用过滤器脚本中的所有元素,即使那些尚未通过无限滚动进入页面的元素?
问题2: 一旦我向下滚动并且所有元素都是可过滤的,窗口就不会在过滤时调整大小.因此,当通过过滤器只显示一个或两个元素时,仍然可以向下滚动页面(即使没有显示任何元素).在检查了这些元素后,我发现它们仍然在DOM中.
过滤脚本
function filterTags(){
isotopeInit();
var $checkboxes = $('#tag-wrap input')
$checkboxes.change(function(){
var arr = [];
$checkboxes.filter(':checked').each(function(){
var $dataToFilter = $(this).attr('data-filter');
arr.push( $dataToFilter );
});
arr = arr.join(', ');
$container.isotope({ filter: arr });
});
};
Run Code Online (Sandbox Code Playgroud)
同位素初始化
function isotopeInit(){
var $container = $('.post-excerpts').imagesLoaded( function() {
$container.isotope({
itemSelector: '.post-excerpt-block-wrap',
layoutMode: 'masonry',
animationEngine: "best-available",
masonry: {
columnWidth: '.post-excerpt-block-wrap'
},
transitionDuration: '2.0',
hiddenStyle: …Run Code Online (Sandbox Code Playgroud) infinite-scroll ×10
android ×4
jquery ×3
javascript ×2
angularjs ×1
filter ×1
java ×1
json ×1
pagination ×1
r ×1
react-infinite-scroll-component ×1
reactjs ×1
rvest ×1
scroll ×1
web-scraping ×1