当您的内容排名可以快速变化时,分页很难,当每个用户的排名不同时,分页就更难了.(让我们将无限卷轴视为一种链接不可见的分页.)有两个难题:顶部新添加的内容和重新排列的内容.
让我们忘记新添加的内容,并接受您必须刷新第1页才能看到它.我们也假装我们做的很纯粹ORDER BY position; 如果您按其他方式订购,则可能必须使用窗口功能.我们的页面每页有4行动物.他们开始:
+----+----------+-----------+
| id | position^| animal |
+----+----------+-----------+
| 1 | 1 | Alpacas |
| 2 | 2 | Bats |
| 3 | 3 | Cows |
| 4 | 4 | Dogs |
| 5 | 5 | Elephants |
| 6 | 6 | Foxes |
| 7 | 7 | Giraffes |
| 8 | 8 | Horses |
+----+----------+-----------+
Run Code Online (Sandbox Code Playgroud)
在我们获取第1页之后,在我们获取第2页之前,很多项目都会移动.DB现在是:
+----+----------+-----------+
| id | position^| animal | …Run Code Online (Sandbox Code Playgroud) 我正在使用ui-bootstrap(angular-bootstrap)库中的分页指令.初始化时我遇到了问题.当我通过url导航到特定页面时,会出现问题.
发生的事情是我的控制器使用$ stateParams中的正确页面进行初始化,然后分页指令初始化并触发ng-change函数,该函数将页面重置为1.现在不再使用on-select-page,是否存在一种只捕获用户点击以更改页面的方法?理想情况下,我希望指令在控制器之前初始化,以便我的页面不会被重置.先感谢您.
如果需要,我可以包含代码,但我觉得我的问题不一定需要代码块.
我想写一个JavaScript函数,它接受一个array,page_size并page_number作为参数,并返回一个数组模仿分页结果:
paginate: function (array, page_size, page_number) {
return result;
}
Run Code Online (Sandbox Code Playgroud)
例如,当:
array = [1, 2, 3, 4, 5],
page size = 2,
page_number = 2,
Run Code Online (Sandbox Code Playgroud)
该函数应该返回:[3, 4].
任何想法,将不胜感激.
使用DataTable,我可以订购,列表,分页,但我想检测分页何时更改,我已经看过API,但我唯一可以做的是更改页面但没有检测到此更改.
我一直在使用jQuery DataTables插件(http://datatables.net)很长一段时间,通常我们使用默认大小和使用"bStateSave": true选项超级精细.
但现在我真的需要将分页的大小设置为[10,25,50,100]而不是我需要这个,比如说[1,2,3].我通过设置选项让菜单设置如此,aLengthMenu:[1,2,3]如果我选择其中一个选项,它会设置正确的选择量.
但是在dataTable STARTUP上,它没有将长度设置为1,2,3而是设置为默认值"10"
我错过了哪个选项?提前致谢!
我正在为Android编写一个简单的文本/电子书查看器,因此我使用了TextView向用户显示HTML格式的文本,因此他们可以通过来回浏览页面中的文本.但我的问题是我不能在Android中对文本进行分页.
我不能(或者我不知道如何)从断行和分页算法中获得适当的反馈,其中TextView用于将文本分成行和页面.因此,我无法理解内容在实际显示中的结束位置,以便我继续从下一页的剩余部分开始.我想找到克服这个问题的方法.
如果我知道屏幕上绘制的最后一个字符是什么,我可以轻松地填充足够的字符来填充屏幕,并且知道实际绘画的完成位置,我可以继续下一页.这可能吗?怎么样?
在StackOverflow上已经多次询问过类似的问题,但没有提供令人满意的答案.这些只是其中的一小部分:
有一个答案,似乎有效,但它很慢.它会添加字符和行,直到填充页面.我不认为这是打破分页的好方法:
它不是这个问题,而是PageTurner电子书阅读器大部分都是正确的,尽管它有点慢.
PS:我不局限于TextView,我知道断行和分页算法可能非常复杂(如在TeX中),所以我不是在寻找一个最佳答案,而是一个相当快速的解决方案,可以被用户.
更新:这似乎是获得正确答案的良好开端:
答:完成文本布局后,可以找到可见文本:
ViewTreeObserver vto = txtViewEx.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = txtViewEx.getViewTreeObserver();
obs.removeOnGlobalLayoutListener(this);
height = txtViewEx.getHeight();
scrollY = txtViewEx.getScrollY();
Layout layout = txtViewEx.getLayout();
firstVisibleLineNumber = layout.getLineForVertical(scrollY);
lastVisibleLineNumber = layout.getLineForVertical(height+scrollY);
}
});
Run Code Online (Sandbox Code Playgroud) 通常分页查询看起来像这样.有没有更好的方法,而不是两个几乎相同的方法,其中一个执行"select*..."而另一个"count*..."?
public List<Cat> findCats(String name, int offset, int limit) {
Query q = session.createQuery("from Cat where name=:name");
q.setString("name", name);
if (offset > 0) {
q.setFirstResult(offset);
}
if (limit > 0) {
q.setMaxResults(limit);
}
return q.list();
}
public Long countCats(String name) {
Query q = session.createQuery("select count(*) from Cat where name=:name");
q.setString("name", name);
return (Long) q.uniqueResult();
}
Run Code Online (Sandbox Code Playgroud) 我试图在春天将列表转换为页面.我用它转换了它
new PageImpl(users,pageable,users.size());
但现在我有排序和分页本身的问题.当我尝试传递大小和页面时,分页不起作用.
这是我正在使用的代码.
我的控制器
public ResponseEntity<User> getUsersByProgramId(
@RequestParam(name = "programId", required = true) Integer programId Pageable pageable) {
List<User> users = userService.findAllByProgramId(programId);
Page<User> pages = new PageImpl<User>(users, pageable, users.size());
return new ResponseEntity<>(pages, HttpStatus.OK);
}
Run Code Online (Sandbox Code Playgroud)
这是我的用户回购
public interface UserRepo extends JpaRepository<User, Integer>{
public List<User> findAllByProgramId(Integer programId);
Run Code Online (Sandbox Code Playgroud)
这是我的服务
public List<User> findAllByProgramId(Integer programId);
Run Code Online (Sandbox Code Playgroud) 假设我在MySQL表中有50行.我想选择前十(LIMIT 10),但我希望能够在不同的页面上选择下一个10.
那么如何在第10行之后开始我的选择呢?
更新的查询:
mysql_query("
SELECT * FROM `picdb`
WHERE `username` = '$username'
ORDER BY `picid` DESC
LIMIT '$start','$count'
")
Run Code Online (Sandbox Code Playgroud) 数据库中有太多表.我怎样才能显示具有某些模式的表格?或者有没有办法在shell命令中像"| more"那样进行分页?
pagination ×10
java ×3
mysql ×3
datatables ×2
jquery ×2
android ×1
angularjs ×1
arrays ×1
database ×1
hibernate ×1
hql ×1
javascript ×1
limit ×1
list ×1
php ×1
show ×1
spring ×1
spring-data ×1
textview ×1