这是一个很常见的问题,但我仍然无法实现它。在我的应用程序中,我正在获取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;
}
任何帮助将不胜感激。谢谢
答案 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();
}
}
}
});