android中的Gridview分页
我从数据库中检索到文本+图像,并将其显示在gridview中。也就是说,每个gridview单元格由一个图像+一个文本组成。现在我必须为此进行分页。我必须允许它每页显示4个单元格。我如何做到这一点?非常感谢示例链接或代码。我认为这可能会对您有所帮助。它包含了在GridView上显示多个项目的基础知识,并提供了代码示例 我希望这能有所帮助 我在Android培训页面链接“”上找到了一个示例,您可以在那里下载一个示例EffectiveNavigation.zip,它对寻呼机非常有用。从那里你将得到适配器的基本知识和你需要的东西 我使用分页实现网格的方法是: 有2个布局,1个带有寻呼机android中的Gridview分页,android,Android,我从数据库中检索到文本+图像,并将其显示在gridview中。也就是说,每个gridview单元格由一个图像+一个文本组成。现在我必须为此进行分页。我必须允许它每页显示4个单元格。我如何做到这一点?非常感谢示例链接或代码。我认为这可能会对您有所帮助。它包含了在GridView上显示多个项目的基础知识,并提供了代码示例 我希望这能有所帮助 我在Android培训页面链接“”上找到了一个示例,您可以在那里下载一个示例EffectiveNavigation.zip,它对寻呼机非常有用。从那里你将得到适
<android.support.v4.view.ViewPager ...
我调用了refreshItems方法,该方法将不会被发生更改的寻呼机适配器“mGridPagerAdapter.notifyDataSetChanged();”调用了RefreshTabs方法来重新计算要显示的选项卡
public void refrestTabs() {
actionBar.removeAllTabs();
for (int i = 0; i < mGridPagerAdapter.getCount(); i++) {
actionBar.addTab(actionBar.newTab()
.setText(mGridPagerAdapter.getPageTitle(i))
.setTabListener(this));
}
}
GridListFragment类扩展了fragment,下面是加载所需数组部分的逻辑。
下面是我使用的onCreateView方法
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle args = getArguments();
position = args.getInt(ARG_SECTION_NUMBER);
View view = inflater.inflate(R.layout.comp_grid_view, container, false);
gridView = (GridView) view.findViewById(R.id.gridview);
applicationItems = new ArrayList<ApplicationItem>();
int resID = R.layout.comp_app_list_item;
aa = new ApplicationListItemAdapter(view.getContext(), resID, applicationItems);
gridView.setAdapter(aa);
gridView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
mCallback.onApplicationSelected(applicationItems.get(position));
}}
);
return view;
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
Bundle args=getArguments();
位置=args.getInt(ARG\u段号);
视图=充气机。充气(R.layout.comp\u grid\u视图,容器,错误);
gridView=(gridView)view.findViewById(R.id.gridView);
applicationItems=新阵列列表“
同样,这可能不是最好的方法,但找不到任何其他方法。这就是我在我的一个应用程序中所做的。希望能有所帮助
public static int currentPage = 0;
private boolean endOfAlbums = false;
private int lastItem = 0;
albumGrid.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
// Pause fetcher to ensure smoother scrolling when flinging // You can ignore this part
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
mImageFetcher.setPauseWork(true);
} else {
mImageFetcher.setPauseWork(false);
}
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
final int _lastItem = firstVisibleItem + visibleItemCount;
if (_lastItem > 0 && totalItemCount > 0)
if (_lastItem == albums.size() && !endOfAlbums && lastItem != _lastItem) {
lastItem = _lastItem;
// Last item is fully visible.
loadAlbums();
}
}
});
return view;
}
private void loadAlbums() {
if (currentPage == 0) {
albums.clear();
endOfAlbums = false;
lastItem = 0;
// get new releases
progressLayout.setVisibility(View.VISIBLE);
} else
progressLoadMore.setVisibility(View.VISIBLE);
if (Utility.isNetworkAvailable(getActivity())) {
new Thread(new Runnable() {
@Override
public void run() {
// get the serverAlbums
ArrayList<Album> serverAlbums = ServerAPI.getAllAlbums(session.getLanguage(), currentPage);
if (serverAlbums.size() > 0)
albums.addAll(serverAlbums);
else
endOfAlbums = true;
currentPage++;
myHandler.post(updateRunnable);
}
}).start();
updateRunnable = new Runnable() {
@Override
public void run() {
if (albums.size() > 0) {
imageAdapter.notifyDataSetChanged();
// get listview current position - used to maintain scroll position
int currentPosition = albumGrid.getFirstVisiblePosition();
// Setting new scroll position
albumGrid.smoothScrollToPosition(currentPosition + 1, 0);
} else
tvNoAlbums.setVisibility(View.VISIBLE);
progressLayout.setVisibility(View.GONE);
progressLoadMore.setVisibility(View.GONE);
}
};
} else {
Toast.makeText(getActivity(), R.string.check_connectivity, Toast.LENGTH_SHORT).show();
progressLayout.setVisibility(View.GONE);
progressLoadMore.setVisibility(View.GONE);
}
}
公共静态int currentPage=0;
私有布尔值endOfAlbums=false;
private int lastItem=0;
albumGrid.setOnScrollListener(新的AbsListView.OnScrollListener(){
@凌驾
公共无效onScrollStateChanged(AbsListView AbsListView,int scrollState){
//暂停抓取程序以确保在投掷时滚动更平滑//您可以忽略此部分
if(scrollState==AbsListView.OnScrollListener.SCROLL\u STATE\u FLING){
mImageFetcher.setPauseWork(true);
}否则{
mImageFetcher.setPauseWork(false);
}
}
@凌驾
public void onScroll(AbsListView AbsListView、int firstVisibleItem、int visibleItemCount、int totalItemCount){
final int _lastItem=firstVisibleItem+visibleItemCount;
如果(_lastItem>0&&totalItemCount>0)
如果(\u lastItem==albums.size()&&&!endOfAlbums&&lastItem!=\u lastItem){
lastItem=\u lastItem;
//最后一项是完全可见的。
加载相册();
}
}
});
返回视图;
}
私有void loadAlbums(){
如果(currentPage==0){
相册;
内胎=假;
lastItem=0;
//获取新版本
progressLayout.setVisibility(View.VISIBLE);
}否则
progressLoadMore.setVisibility(View.VISIBLE);
if(Utility.isNetworkAvailable(getActivity())){
新线程(newrunnable()){
@凌驾
公开募捐{
//获取服务器相册
ArrayList serverAlbums=ServerAPI.getAllAlbums(session.getLanguage(),currentPage);
如果(serverAlbums.size()>0)
addAll(服务器相册);
其他的
内胎=真;
currentPage++;
myHandler.post(updateRunnable);
}
}).start();
updateRunnable=newrunnable(){
@凌驾
公开募捐{
如果(albums.size()>0){
imageAdapter.notifyDataSetChanged();
//获取listview当前位置-用于保持滚动位置
int currentPosition=albumGrid.getFirstVisiblePosition();
//设置新的滚动位置
albumGrid.smoothScrollToPosition(当前位置+1,0);
}否则
tvNoAlbums.setVisibility(View.VISIBLE);
progressLayout.setVisibility(View.GONE);
progressLoadMore.setVisibility(View.GONE);
}
};
}否则{
Toast.makeText(getActivity(),R.string.check_connectivity,Toast.LENGTH_SHORT).show();
progressLayout.setVisibility(View.GONE);
progressLoadMore.setVisibility(View.GONE);
}
}
//试试这个--
这个链接帮助我在gridview中显示图像。但是我需要分页
@Override
public Fragment getItem(int i) {
Fragment fragment = new GridListFragment();
Bundle args = new Bundle();
args.putInt(GridListFragment.ARG_SECTION_NUMBER, i);
fragment.setArguments(args);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
Bundle args = getArguments();
position = args.getInt(ARG_SECTION_NUMBER);
View view = inflater.inflate(R.layout.comp_grid_view, container, false);
gridView = (GridView) view.findViewById(R.id.gridview);
applicationItems = new ArrayList<ApplicationItem>();
int resID = R.layout.comp_app_list_item;
aa = new ApplicationListItemAdapter(view.getContext(), resID, applicationItems);
gridView.setAdapter(aa);
gridView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View v, int position,
long id) {
mCallback.onApplicationSelected(applicationItems.get(position));
}}
);
return view;
}
@Override
public void onStart() {
applicationItems.clear();
AppShortcutApplication appState = ((AppShortcutApplication)getActivity().getApplicationContext());
List<ApplicationItem> l = appState.getCurrentListApplications();
if (l != null){
applicationItems.clear();
applicationItems.addAll(l);
aa.notifyDataSetChanged();
}
super.onStart();
}
public static int currentPage = 0;
private boolean endOfAlbums = false;
private int lastItem = 0;
albumGrid.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
// Pause fetcher to ensure smoother scrolling when flinging // You can ignore this part
if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING) {
mImageFetcher.setPauseWork(true);
} else {
mImageFetcher.setPauseWork(false);
}
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
final int _lastItem = firstVisibleItem + visibleItemCount;
if (_lastItem > 0 && totalItemCount > 0)
if (_lastItem == albums.size() && !endOfAlbums && lastItem != _lastItem) {
lastItem = _lastItem;
// Last item is fully visible.
loadAlbums();
}
}
});
return view;
}
private void loadAlbums() {
if (currentPage == 0) {
albums.clear();
endOfAlbums = false;
lastItem = 0;
// get new releases
progressLayout.setVisibility(View.VISIBLE);
} else
progressLoadMore.setVisibility(View.VISIBLE);
if (Utility.isNetworkAvailable(getActivity())) {
new Thread(new Runnable() {
@Override
public void run() {
// get the serverAlbums
ArrayList<Album> serverAlbums = ServerAPI.getAllAlbums(session.getLanguage(), currentPage);
if (serverAlbums.size() > 0)
albums.addAll(serverAlbums);
else
endOfAlbums = true;
currentPage++;
myHandler.post(updateRunnable);
}
}).start();
updateRunnable = new Runnable() {
@Override
public void run() {
if (albums.size() > 0) {
imageAdapter.notifyDataSetChanged();
// get listview current position - used to maintain scroll position
int currentPosition = albumGrid.getFirstVisiblePosition();
// Setting new scroll position
albumGrid.smoothScrollToPosition(currentPosition + 1, 0);
} else
tvNoAlbums.setVisibility(View.VISIBLE);
progressLayout.setVisibility(View.GONE);
progressLoadMore.setVisibility(View.GONE);
}
};
} else {
Toast.makeText(getActivity(), R.string.check_connectivity, Toast.LENGTH_SHORT).show();
progressLayout.setVisibility(View.GONE);
progressLoadMore.setVisibility(View.GONE);
}
}
gridView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (totalItemCount > 0) {
int lastVisibleItem = firstVisibleItem + visibleItemCount;
if (!isLoading && hasMoreItems && (lastVisibleItem == totalItemCount)) {
isLoading = true;
//load more items--
}
}
}
});