如何在Android listview中实现分页

     2023-04-13     283

关键词:

【中文标题】如何在Android listview中实现分页【英文标题】:How to implement pagination in Android listview 【发布时间】:2013-05-15 17:28:04 【问题描述】:

我正在为 Android 应用程序工作,我需要在其中显示带有项目的列表视图。但是列表视图中要显示更多元素。

我决定实现分页。我尝试在 Google 中搜索,但没有找到任何相关信息。

谁能帮帮我..

【问题讨论】:

什么样的导航?您可以在列表项单击后简单地创建一个活动 对不起我的错误。请检查编辑的问题.. CommonWare 的EndlessAdapter 是一种常用的列表分页方法。或者,您可以自己实现分页逻辑,或使用例如按钮从一页转到下一页。 【参考方案1】:

实现分页非常简单。

看看这个……

public class MainActivity extends Activity   

    private ListView listview;
    private TextView title;

   private ArrayList<String> data;
    ArrayAdapter<String> sd;


    public int TOTAL_LIST_ITEMS = 1030;
    public int NUM_ITEMS_PAGE   = 100;
    private int noOfBtns;
    private Button[] btns;

    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listview = (ListView)findViewById(R.id.list);
        title    = (TextView)findViewById(R.id.title);

        Btnfooter();

        data = new ArrayList<String>();

        /*
         * The ArrayList data contains all the list items
         */
        for(int i=0;i<TOTAL_LIST_ITEMS;i++)
        
            data.add("This is Item "+(i+1));
        

        loadList(0);

        CheckBtnBackGroud(0);

    

    private void Btnfooter()
    
        int val = TOTAL_LIST_ITEMS%NUM_ITEMS_PAGE;
        val = val==0?0:1;
        noOfBtns=TOTAL_LIST_ITEMS/NUM_ITEMS_PAGE+val;

        LinearLayout ll = (LinearLayout)findViewById(R.id.btnLay);

        btns = new Button[noOfBtns];

        for(int i=0;i<noOfBtns;i++)
        
            btns[i] =   new Button(this);
            btns[i].setBackgroundColor(getResources().getColor(android.R.color.transparent));
            btns[i].setText(""+(i+1));

            LinearLayout.LayoutParams lp = new     LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
            ll.addView(btns[i], lp);

            final int j = i;
            btns[j].setOnClickListener(new OnClickListener() 

                public void onClick(View v)
                
                    loadList(j);
                    CheckBtnBackGroud(j);
                
            );
        

    

    /**
     * Method for Checking Button Backgrounds
     */
    private void CheckBtnBackGroud(int index)
    
        title.setText("Page "+(index+1)+" of "+noOfBtns);
        for(int i=0;i<noOfBtns;i++)
        
            if(i==index)
            
                btns[index].setBackgroundDrawable(getResources().getDrawable(R.drawable.box_green));
                btns[i].setTextColor(getResources().getColor(android.R.color.white));
            
            else
            
                btns[i].setBackgroundColor(getResources().getColor(android.R.color.transparent));
                btns[i].setTextColor(getResources().getColor(android.R.color.black));
            
        

    

    /**
     * Method for loading data in listview
     * @param number
     */
    private void loadList(int number)
    
        ArrayList<String> sort = new ArrayList<String>();

        int start = number * NUM_ITEMS_PAGE;
        for(int i=start;i<(start)+NUM_ITEMS_PAGE;i++)
        
            if(i<data.size())
            
                sort.add(data.get(i));
            
            else
            
                break;
            
        
        sd = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1,
                sort);
        listview.setAdapter(sd);
    

Xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical" >

<TextView
    android:id="@+id/title"
    android:layout_
    android:layout_
    android:textColor="@android:color/black"
    android:gravity="center"
    android:textSize="16sp"
    android:background="@android:color/darker_gray"
    android:padding="10dp"/>

<ListView
    android:id="@+id/list"
    android:divider="#000"
    android:dividerHeight="1dp"
    android:cacheColorHint="#00000000"
    android:layout_
    android:layout_
    android:layout_weight="1"
    android:fadingEdge="none"/>

<HorizontalScrollView
    android:layout_
    android:layout_>
    <LinearLayout
        android:id="@+id/btnLay"
        android:layout_
        android:layout_
        android:orientation="horizontal" >
    </LinearLayout>
</HorizontalScrollView>
</LinearLayout>

如需更清晰的解释和源代码,请访问此链接

ListView Pagination Ex-1

ListView Pagination Ex-2

【讨论】:

【参考方案2】:

我已经创建了这个自定义列表视图。

    package com.pixecon.custom.views;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.FrameLayout;
import android.widget.ListView;

public class PagingListView extends ListView 
    boolean needScroll = true;
    private String TAG = "CustomListView";

    public PagingListView(Context context, AttributeSet attrs) 
        super(context, attrs);
    

    public void setNeedScroll(boolean needScroll) 
        this.needScroll = needScroll;
    

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) 
        if (!needScroll) 
            return false;
        
        else 
            return super.onInterceptTouchEvent(event);
        
    

    @Override
    public void setOnScrollListener(OnScrollListener l) 
        super.setOnScrollListener(l);
    

    public void onScrollStarted() 
        //Scroll Started.
    

    public void onScrollStopped() 
        centralizeTheView();
    

    private void centralizeTheView() 
        int height = getResources().getDisplayMetrics().heightPixels;
        int centerY = height / 2;

        int visibleFirstItemPosition = getFirstVisiblePosition();
        int visibleLastItemPosition = getLastVisiblePosition();

        Log.d(TAG, "visibleFirstVisible = " + visibleFirstItemPosition);
        Log.d(TAG, "visibleLastVisible = " + visibleLastItemPosition);

        //TODO: Check the calcualted value and reconfirm.
        int firstPositionInGroup = visibleFirstItemPosition % 2 - 1;
        if (firstPositionInGroup < 0) 
            firstPositionInGroup = 0;
        

        FrameLayout layout = (FrameLayout) getChildAt(firstPositionInGroup);
        int bottom = layout.getBottom();

        //Calculate the exact bottom of the view by subtracting
        if (bottom > centerY) 
            Log.d(TAG, "First Item - " + visibleFirstItemPosition);
            /*listView.smoothScrollBy(3, 1);*/
            //listView.smoothScrollToPosition(visibleFirstItemPosition);
            setSelection(visibleFirstItemPosition);
        
        else 
            Log.d(TAG, "Last Item - " + visibleLastItemPosition);
            /*listView.smoothScrollBy(-3, 1);*/
            //listView.smoothScrollToPosition(visibleLastItemPosition);
            setSelection(visibleLastItemPosition);
        
    


【讨论】:

您忘了强调应该实现 ScrollListener 来处理滚动更改状态并调用 onScrollStoped。

如何在nodejs + postgresql中实现分页

】如何在nodejs+postgresql中实现分页【英文标题】:Howtoimplementpaginationinnodejs+postgresql【发布时间】:2018-06-2604:23:58【问题描述】:我是Node.js的新手。我想在Node.js中使用express作为框架和Postgresql作为数据库在我的Api编写中实现分页... 查看详情

如何在排名查询中实现分页?

】如何在排名查询中实现分页?【英文标题】:Howtoimplementpaginginrankingquery?【发布时间】:2014-03-0506:18:32【问题描述】:我正在尝试使用MySQL进行排名。我找到了一篇关于它的好文章,没有使用自连接(rankingwithoutselfjoin)。SELECTscore... 查看详情

如何在 dojox.datagrid 中实现分页

】如何在dojox.datagrid中实现分页【英文标题】:howtoimplementpaginationindojox.datagrid【发布时间】:2019-02-1319:37:34【问题描述】:我有一个在dojox.datagrid中显示分页的请求,我尝试搜索但没有运气。想知道dojox.datagrid中是否可以分页,... 查看详情

如何在 React 中实现分页

】如何在React中实现分页【英文标题】:HowtoimplementpaginationinReact【发布时间】:2017-03-0701:58:48【问题描述】:我是ReactJS的新手,正在其中创建一个简单的TODO应用程序。实际上,它是一个非常基本的应用程序,没有数据库连接,... 查看详情

如何在 PHP 中实现分页? [关闭]

】如何在PHP中实现分页?[关闭]【英文标题】:HowdoyouimplementpaginationinPHP?[closed]【发布时间】:2010-09-2100:57:37【问题描述】:PHP中通常如何实现分页结果?我想要一个包含10个结果的结果页面。在导航中向前翻页会给我下一组和上... 查看详情

如何在 Git 标签中实现分页

】如何在Git标签中实现分页【英文标题】:HowtoachievepaginationinGittag【发布时间】:2021-11-0519:04:31【问题描述】:谁帮帮我将git标签限制为100需要在第一次获取时获取前100个标签需要传递一些key或token来获取下一批可以像分页一样... 查看详情

如何在 Spring MVC 3 中实现分页 [关闭]

】如何在SpringMVC3中实现分页[关闭]【英文标题】:HowtoimplementpaginationinSpringMVC3[closed]【发布时间】:2011-01-1517:54:46【问题描述】:是否有任何开箱即用、易于实现的标准分页组件/标签库或代码示例可用于SpringMVC中的分页?【问题... 查看详情

如何在 SQL for MS Access 中实现分页?

】如何在SQLforMSAccess中实现分页?【英文标题】:HowdoIimplementpaginationinSQLforMSAccess?【发布时间】:2009-12-1412:25:24【问题描述】:我正在使用ASP.NET通过OdbcConnection类访问MicrosoftAccess2002数据库(MDB),虽然速度很慢,但它运行良好。我... 查看详情

如何使用hibernate在spring boot中实现分页

】如何使用hibernate在springboot中实现分页【英文标题】:Howtoimplementpaginationinspringbootwithhibernate【发布时间】:2015-12-0217:41:44【问题描述】:我正在使用带有休眠功能的SpringBoot,并且我想在我的项目中使用分页。我在谷歌上搜索并... 查看详情

如何在 SQL for MS Access 中实现分页?

】如何在SQLforMSAccess中实现分页?【英文标题】:HowdoIimplementpaginationinSQLforMSAccess?【发布时间】:2009-12-1412:25:24【问题描述】:我正在使用ASP.NET通过OdbcConnection类访问MicrosoftAccess2002数据库(MDB),虽然速度很慢,但它运行良好。我... 查看详情

如何在后端自定义查询中实现分页

】如何在后端自定义查询中实现分页【英文标题】:Howtoimplementpaginationincustomqueryinbackand【发布时间】:2016-02-2319:31:05【问题描述】:我想在我的自定义查询中实现分页,就像在提供的查询中一样。我想提供行数和页数。我尝试... 查看详情

在 ASP.NET Core 2.1 Web API 中实现分页

...905:28:50【问题描述】:我搜索了,但并没有真正找到关于如何在ASP.NETWebAPICore2.1应用程序中实现分页逻辑的文章...我有以下[Route("api/[controller]")][ApiController][EnableCors( 查看详情

在mongodb中实现分页

】在mongodb中实现分页【英文标题】:Implementingpaginationinmongodb【发布时间】:2015-03-2204:52:34【问题描述】:我知道使用skip来实现分页是一种不好的做法,因为当您的数据变大时skip开始消耗大量内存。解决此问题的一种方法是使... 查看详情

java示例代码_在Spring MVC 3中实现分页

java示例代码_在Spring MVC 3中实现分页 查看详情

使用 scrollViewDidScroll 方法在 UITableView 中实现分页?

】使用scrollViewDidScroll方法在UITableView中实现分页?【英文标题】:ImplementingpaginationinUITableViewwithscrollViewDidScrollmethod?【发布时间】:2014-09-1714:59:06【问题描述】:我正在构建一个文章阅读应用程序。我正在使用AFNetworking第三方库... 查看详情

在ssh项目中实现分页效果

在实现分页的时候,我使用的是数据库下面的User表,实现的效果是通过分页查询能够将表中的数据分页显示,点击相关的按钮实现:首页、上一页、下一页、末页的显示1新建一个dynamicwebproject项目,导入SSH项目所需要的jarantlr-2.... 查看详情

用servlet与jsp中实现分页查询

这个题目,总共分4个部分1.查询总页数,把页码显示在页面上2.把每页的内容显示在页面上3.首页,尾页,上一页,下一页4.下拉列表中的页数,(根据页数变动,选中第几页提交到第几页)详解如下:(一部分代码在servlet中,... 查看详情

在存储库级别在 Doctrine2 ORM 中实现分页的最佳实践

】在存储库级别在Doctrine2ORM中实现分页的最佳实践【英文标题】:BestpracticesofimplementingpaginationinDoctrine2ORMonrepositorylevel【发布时间】:2013-08-1909:03:07【问题描述】:我知道Doctrine\'sPaginator,但它适用于DQL级别。我正在寻找的是一... 查看详情