I am new to android. In my app I am using listview
, and in my listview
I have to load 26 records. I decided to load 3 records first; then when I scroll, next 3 records, etc. I want to load using a progress-bar at bottom of listview
.
After all records are completed, I need to show no "records available".
Can anybody help me please?
public class MainActivity extends Activity {
ListView listView;
String[] arrayS = new String[]{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"};
View footer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actvity);
listView = (ListView) findViewById(R.id.load);
final ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 3; i++) {
list.add(arrayS[i]);
}
//Add footer view:-
footer = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.progress, null, false);
listView.addFooterView(footer);
final ArrayAdapter<String> ad = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(ad);
// Implementing scroll refresh:-
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView absListView, int firstItem, int visibleItemCount, final int totalItems) {
});
}
}
Use the following piece of logic to get when to call next set of data for load more -
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
int lastInScreen = firstVisibleItem + visibleItemCount;
if ((lastInScreen == totalItemCount) && !(flagForCheckingIfMoreDataAvailable)) {
// load more
}
}
Here is the complete code for do it.
package com.demo;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
public class Demo extends Activity {
private ListView listView;
private String[] arrayS;
private View footer;
private boolean moreData = true;
ArrayList<String> list;
private ArrayAdapter ad;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
listView = (ListView) findViewById(R.id.load);
list = new ArrayList<String>();
for (int i = 0; i < 25; i++) {
list.add("item" + i);
}
//Add footer view:-
footer = ((LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.progress, null, false);
listView.addFooterView(footer);
ad = new ArrayAdapter(Demo.this, android.R.layout.simple_list_item_1, list);
listView.setAdapter(ad);
// Implementing scroll refresh:-
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView absListView, int i) {
}
@Override
public void onScroll(AbsListView absListView, int firstItem, int visibleItemCount, final int totalItems) {
final int lastItem = firstItem + visibleItemCount;
if (lastItem == totalItems) {
if (moreData) {
footer.setVisibility(View.VISIBLE);
footer.setPadding(0, 0, 0, 0);
Handler handler = new Handler(); // hear is the handler for testing purpose
handler.postDelayed(new Runnable() { // make some delay for check load more view
@Override
public void run() {
getListData();
}
}, 10000);
}
}
}
});
}
private void getListData() {
for (int i = 0; i < 105; i++) {
list.add("New Item " + i);
}
footer.setVisibility(View.GONE);
footer.setPadding(0, -1 * footer.getHeight(), 0, 0);
//here above tow line invisible footer after data added
if (ad != null) {
ad.notifyDataSetChanged();
}
moreData=false; //now after successfully data get you can stop more data.
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.