在Listview中实现Load More按钮

时间:2014-07-14 07:42:17

标签: android listview button

这是一个很常见的问题,但我仍然无法实现它。在我的应用程序中,我正在获取Inbox messages并在ListView中显示它们。代码工作正常但onStartup它将所有消息从收件箱加载到listview。但是我希望在应用程序启动时它只加载first 15 message之后会显示标签为LoadMore的按钮,当单击按钮时,接下来会有15条消息添加到列表视图中。这是我的代码片段:

listViewSMS=(ListView)findViewById(R.id.lvSMS); 
listViewSMS.setAdapter(smsListAdapter);
getInboxSms();
smsListAdapter = new SMSListAdapter(this,populateSMSList());
    listViewSMS.setAdapter(smsListAdapter);

public void getInboxSms() {
    ContentResolver cr = getContentResolver();
    c = cr.query(Uri.parse("content://sms/inbox"), null, null, null, null);
    totalSMS = c.getCount();
    if (c.moveToFirst()) {
        for (int i = 0; i < totalSMS; i++) {
            Log.d("SMSss", "Contact number : "+ c.getString(c.getColumnIndexOrThrow("address"))+ "\n"
                            + "msg : " + c.getColumnIndexOrThrow("body")
                            + "\n"+ "Person : "
                            + getContactName(c.getString(c.getColumnIndexOrThrow("address"))));
            c.moveToNext();
        }
    }
}

private List<SMSListModel> populateSMSList() 
{
    if(c.getCount()>0)
    {
        for(int i=0;i<c.getCount();i++)
        {
            if(c.moveToPosition(i))
            {

                if(getContactName(c.getString(c.getColumnIndex("address"))) == null )
                {
                    list.add(new SMSListModel(c.getString(c.getColumnIndex("address")),c.getString(c.getColumnIndex("body"))));

                }
                }
        }
    }
    return list;        
}

任何帮助将不胜感激。谢谢

3 个答案:

答案 0 :(得分:0)

您可以使用适配器(请参阅http://developer.android.com/reference/android/widget/ListAdapter.html)。首先,创建一个包含15条第一条消息的列表,然后在适配器中设置使用它,并在ListView对象上设置使用setAdapter()。当用户单击您的按钮时,您只需创建一个包含更多元素的新列表,然后创建一个新适配器并将其设置为列表视图。

答案 1 :(得分:0)

您可以使用LoadMoreButton简单教程,逐步描述您的目标。

答案 2 :(得分:0)

您可以使用Listview.setOnScrollListener

ListView.setOnScrollListener(new OnScrollListener() {

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            // checking up n down

                    }

        @Override
        public void onScroll(AbsListView view, int firstVisibleItem,
                int visibleItemCount, int totalItemCount) {

            flag_end_show = false;
            if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
            {
                flag_end_show = true;
                if(flag_loading == false)
                {
                    flag_loading = true;

                        new LoadMoreAsync().execute();
                }
            }

        }
    });