关于php–如何使用zendpaginate而不加载数据库的所有结果和php添加数据到数据库没有反应的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于AndroidListview滑动时不加
关于php – 如何使用zend paginate而不加载数据库的所有结果和php添加数据到数据库没有反应的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Android Listview滑动时不加载数据 停止时加载数据、c# – 如何使用Paginate方法、Cakephp如何在paginate使用unbind、ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动等相关知识的信息别忘了在本站进行查找喔。
本文目录一览:- php – 如何使用zend paginate而不加载数据库的所有结果(php添加数据到数据库没有反应)
- Android Listview滑动时不加载数据 停止时加载数据
- c# – 如何使用Paginate方法
- Cakephp如何在paginate使用unbind
- ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动
php – 如何使用zend paginate而不加载数据库的所有结果(php添加数据到数据库没有反应)
所以我看到zend paginate工作的方式是你做的:
$paginator = Zend_Paginator::factory($results);
$paginator->setItemCountPerPage($itemCount);
$paginator->setPageRange($pageRange);
其中$results是以数据库形式从数据库加载一堆项的结果
"SELECT * FROM table WHERE etc"
然后zend paginate将计算结果数并自动生成页面范围…
但是如果你这样做,那么你将不得不获取数据库的所有结果,我认为这是一种浪费,因为一次只显示一个页面,因此你只需要获取该页面的项目……
如何使zend paginate能够计算正确的页面范围和数字而无需获取整个表的所有结果?
$adapter = new Zend_Paginator_Adapter_DbSelect($db->select()->from('posts'));
$adapter->setRowCount(
$db->select()
->from(
'item_counts',array(
Zend_Paginator_Adapter_DbSelect::ROW_COUNT_COLUMN => 'post_count'
)
)
);
$paginator = new Zend_Paginator($adapter)
http://framework.zend.com/manual/en/zend.paginator.usage.html#zend.paginator.usage.dbselect
Android Listview滑动时不加载数据 停止时加载数据
本文实例为大家分享了Listview滑动时不加载数据 停止时加载数据的具体代码,供大家参考,具体内容如下
数据源配置(Adapter)
package com.zhengsonglan.listview_loading.adapter; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; import com.nostra13.universalimageloader.core.ImageLoader; import com.zhengsonglan.listview_loading.R; import com.zhengsonglan.listview_loading.entity.UserEnity; import java.util.List; /** * */ public class MyAdapter extends BaseAdapter { Context context; LayoutInflater inflater; List<UserEnity> lists; private boolean scrollState=false; public void setScrollState(boolean scrollState) { this.scrollState = scrollState; } public MyAdapter(Context context,List<UserEnity> lists) { this.context=context; this.inflater=LayoutInflater.from(context); this.lists=lists; } @Override public int getCount() { return lists!=null?lists.size():0; } @Override public Object getItem(int position) { return lists.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position,View convertView,ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView=inflater.inflate(R.layout.main_item,null,true); viewHolder=new ViewHolder(); viewHolder.iv_icon= (ImageView) convertView.findViewById(R.id.main_item_iv_icon); viewHolder.tv_name= (TextView) convertView.findViewById(R.id.main_item_tv_name); convertView.setTag(viewHolder); } else { viewHolder= (ViewHolder) convertView.getTag(); } UserEnity userEnity=lists.get(position); String img_url=userEnity.getIcon(); if (!scrollState){ viewHolder.tv_name.setText(userEnity.getName()); viewHolder.tv_name.setTag(null); ImageLoader.getInstance().displayImage(img_url,viewHolder.iv_icon); viewHolder.iv_icon.setTag("1"); }else{ viewHolder.tv_name.setText("加载中"); viewHolder.tv_name.setTag(userEnity.getName()); viewHolder.iv_icon.setTag(img_url); viewHolder.iv_icon.setimageResource(R.mipmap.ic_launcher); } return convertView; } static class ViewHolder{ TextView tv_name; ImageView iv_icon; } }
这个Adapter中重要的代码如下:
//定义当前listview是否在滑动状态 private boolean scrollState=false; public void setScrollState(boolean scrollState) { this.scrollState = scrollState; }
//实体类 UserEnity userEnity=lists.get(position); if (!scrollState){//如果当前不是滑动的状态,我们填充真数据 //填充数据 viewHolder.tv_name.setText(userEnity.getName()); //设置Tag中数据为空表示数据已填充 viewHolder.tv_name.setTag(null); //加载图片 ImageLoader.getInstance().displayImage(img_url,viewHolder.iv_icon); //设置tag为1表示已加载过数据 viewHolder.iv_icon.setTag("1"); }else{//如果当前是滑动的状态,我们填充假数据 viewHolder.tv_name.setText("加载中"); //将数据name保存在Tag当中 viewHolder.tv_name.setTag(userEnity.getName()); //将数据image_url保存在Tag当中 viewHolder.iv_icon.setTag(img_url); //设置默认显示图片(最好是本地资源的图片) viewHolder.iv_icon.setimageResource(R.mipmap.ic_launcher); }
设置监听
ok,我们在看看Activity中的代码,主要是监听listview的onscrolllistener方法
@Override public void onScrollStateChanged(AbsListView view,int scrollState) { switch (scrollState){ case AbsListView.OnScrollListener.SCROLL_STATE_IDLE://停止滚动 { //设置为停止滚动 myAdapter.setScrollState(false); //当前屏幕中listview的子项的个数 int count = view.getChildCount(); Log.e("MainActivity",count+""); for (int i = 0; i < count; i++) { //获取到item的name TextView tv_name = (TextView) view.getChildAt(i).findViewById(R.id.main_item_tv_name); //获取到item的头像 ImageView iv_show= (ImageView) view.getChildAt(i).findViewById(R.id.main_item_iv_icon); if (tv_name.getTag() != null) { //非null说明需要加载数据 tv_name.setText(tv_name.getTag().toString());//直接从Tag中取出我们存储的数据name并且赋值 tv_name.setTag(null);//设置为已加载过数据 } if (!iv_show.getTag().equals("1")){//!="1"说明需要加载数据 String image_url=iv_show.getTag().toString();//直接从Tag中取出我们存储的数据image――url ImageLoader.getInstance().displayImage(image_url,iv_show);//显示图片 iv_show.setTag("1");//设置为已加载过数据 } } break; } case AbsListView.OnScrollListener.SCROLL_STATE_FLING://滚动做出了抛的动作 { //设置为正在滚动 myAdapter.setScrollState(true); break; } case AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL://正在滚动 { //设置为正在滚动 myAdapter.setScrollState(true); break; } } }
最后记得给listview加上滑动的监听
listview.setonScrollListener(this);
效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。
c# – 如何使用Paginate方法
在存储库中有一个方法,如:
public virtual PaginatedList<T> Paginate<TKey>(int pageIndex,int pageSize,Expression<Func<T,TKey>> keySelector,bool>> predicate,params Expression<Func<T,object>>[] includeProperties) { IQueryable<T> query = AllIncluding(includeProperties).OrderBy(keySelector); query = (predicate == null) ? query : query.Where(predicate); return query.ToPaginatedList(pageIndex,pageSize); }
但是,当我尝试使用它时,像这样:
var a = repository.Paginate<Region>(pageNo,pageSize,x => x.ID,null);
我收到此错误:
Cannot implicitly convert type ‘int’ to
‘Domain.Entities.Dictionaries.Region’
我究竟做错了什么?
解决方法
我想你的样本应该是:
repository.Paginate<int>(pageNo,null);
通用类型T i假设是为整个类指定的,因此在此处应该没有在调用中指定它,因为存储库实例已经是特定于通用的.
Cakephp如何在paginate使用unbind
cakephp的controller中的paginate是一个得到分页数据的函数.配合helper里的paginator,可以很轻松的做出分页列表,排序的列表页面.
但由我开始学习用cakephp时,我就有一个问题一直困扰着我.
model如何解除关联(unbind)?
正常的情况下,只要在find之前解除(unbind)我不需的model.就可以不去搜索这些modeld关联的数据表.而且在find完以后会自动返把之前我解除的model再次关联起来.以下是常用的使用方法
//user model
class User extends AppModel {
var $name = ''User'';
var $belongsTo = array(
''Profile'' = array(''className''=>''Profile'',''foreignKey''=>''user_id'')
)
}
运行以下代码
$this->User->unbind(array(''belongsTo''=>array(''Profile'')));
$rs=$this->User->find();
$rs会是
立即学习“PHP免费学习笔记(深入)”;
array(
''User''=>array(),
)
如果在find之前没有运行unbind,$rs将会是
array(
''User''=>array(),
''Profile''=>array()
)
但如果运行paginate就得不到同样的结果
code]
$this->User->unbind(array(''belongsTo''=>array(''Profile'')));
$rs=$this->paginate(''User'');
[/code]
$rs的结果还是
array(
''User''=>array(),
''Profile''=>array()
)
为什么在paginate不能解除关联(unbind)?
原因是在find里在得到数据后,find会用model->resetAssociations();把所有关联(Association)还原.而paginate里使用了两次find.一次是得到总数,另一次得到分页显示的数据.所以返回的结果还是有Profile的内容.
解决方法:给unbind的第二个参数里赋上非ture的值.如果unbind的第二个参数是true,cakephp会把需要解除关联的数据库保存到model->__backAssociation里,当运行model->resetAssociations();会从model->__backAssociation把相关的关联的数据还原.所以以下代码就可以解决
$this->User->unbind(array(''belongsTo''=>array(''Profile'')),false);
$rs=$this->paginate(''User'');
另外,如果在运行paginate()后,还需要使用model里的关联数据来find 数据.可以在app_model.php文件里增加以下代码
/**
* function description:turn off the Association,and return the the Association,.
* the function working for Controller->paginate() and Model->bind().
* the function will help you that get data form Controller->paginate() before unbind some
* Association for and rebind the remove of Association after get data.
* if you don''t neet to rebind Association,you can only use
* <br> * $this->Models->unbind($params,false);<br> *
* @Date:2008-10-10
* <br> * $backAssociation = $this->ModelName->unbindAndPushModels(array(''belongsTo''=>array(''User'')));<br> * $result=$this->paginate(''ModelName'');<br> * $this->ModelName->bind($backAssociation);//this action is to restore the model of assocication data.<br> *
* @param (类型)参数名 :描述
**/
Function unbindAndPushModels($params)
{
$backAssociation=array();
foreach ($params as $assoc => $models)
{
foreach ($models as $model)
{
If(isset($this->{$assoc}[$model]))
{
$backAssociation[$assoc][$model] = ;
unset ($this->{$assoc}[$model]);
}
}
}
Return $backAssociation;
以上就是Cakephp如何在paginate使用unbind的内容。
ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动
如何解决ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动?
我有 PagingDataAdapter,它包含在 ConcatAdapter 内的 GridAdapter 中。 当我像这样收集数据时:
lifeCycleScope.launch { viewmodel.setPostState().collectLatest {pagingData->postsAdapter.notifyItems(pagingData) } }
分页库开始按顺序加载所有页面,无需滚动。
postsAdapter 是一个带有 GridLayoutManager 的适配器,它是对 PagingDataAdapter 的封装
viewmodel 中的 setPostState 函数:
fun setPostState(): Flow<PagingData<Post>> =
Pager(
PagingConfig(
PAGE_SIZE,initialLoadSize = INIT_LOAD_SIZE
)
)
{
PostsPagingSource { page,pageSize ->
useCase.getPosts(page,pageSize)
}
}
.flow
.cachedIn(viewmodelScope)
GridAdapter 中的notifyItems 函数:
suspend fun notifyItems(data: PagingData<Post>) {
withContext(Default) { nestedAdapter.submitData(data) }
}
我怀疑 concat 适配器为我的 GridAdapter 提供了无限的高度,它开始加载所有内容,就好像我将 recyclerView 放在了nestedScrollView 中
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
关于php – 如何使用zend paginate而不加载数据库的所有结果和php添加数据到数据库没有反应的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android Listview滑动时不加载数据 停止时加载数据、c# – 如何使用Paginate方法、Cakephp如何在paginate使用unbind、ConcatAdapter 内的 Paging3 库的 PagingDataAdapter 加载所有页面而不滚动的相关信息,请在本站寻找。
本文标签: