我从服务器获得500条记录。我想在列表视图中显示10个项目,当列表视图到达末尾时,我需要加载另外10个项目,以此类推。我在网上看过很多例子,但是我无法解决这个问题,请帮帮我。
下面是我的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.form);
Seen = (ImageView) findViewById(R.id.SeenStatus);
new GetDescendingDate().execute();
userArray = new ArrayList<listmodel>();
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String Id = ((TextView) view.findViewById(R.id.txtId))
.getText().toString();
// Starting single activity
Intent in = new Intent(getApplicationContext(),
details.class);
in.putExtra("TAG_Id", Id);
startActivity(in);
});
}
}
private class GetDescendingDate extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(Atab.this);
pDialog.setMessage("Loading...");
pDialog.setCancelable(false);
pDialog.show();
}
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
protected Void doInBackground(Void... arg0) {
JSONParser jParser = new JSONParser();
// Getting JSON Array node
JSONArray json;
session = new SessionManager(getApplicationContext());
session.checkLogin();
HashMap<String, String> user = session.getUserDetails();
String email = user.get(SessionManager.KEY_EMAIL);
String Status = "New";
String get;
get = URL.Get;
String url_new = get + email + "/" + Status + "/" + "SODD"
+ "/" + "null" + "/" + "0" + "/" + "10";
try {
json = jParser.getJSONFromUrl(url_new);
if (json != null) {
// looping through All Orders
for (int i = 0; i < json.length(); i++) {
try {
JSONObject c = json.getJSONObject(i);
String number = c.getString("No");
String By = c.getString("By");
String Type = c.getString("Type");
String Descripton = c.getString("Desc");
String Date = c.getString("DateTime");
String Id = c.getString("Id");
String ONo = c.getString("ONo");
String FirstName = c .getString("FirstName");
String Price = c.getString("Price");
listmodel list = new listmodel();
list.setId(Id);
list.setBy(By);
list.setType(Type);
list.setDescription(Descripton);
list.setDate(Date);
list.setPrice(Price);
list.setName(FirstName);
userArray.add(list);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
else {
Log.e("New", "Couldn't get any data from the url");
}
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return null;
}
protected void onPostExecute(Void result) {
super.onPostExecute(result);
if (pDialog.isShowing())
pDialog.dismiss();
adapter = new adapter(Atab.this,userArray);
setListAdapter(adapter);
}
}发布于 2015-02-26 20:27:17
你可以像这样实现..
listView.setOnScrollListener(new OnScrollListener() {
private int currentVisibleItemCount;
private int currentScrollState;
private int currentFirstVisibleItem;
private int totalItem;
private LinearLayout lBelow;
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
this.currentScrollState = scrollState;
this.isScrollCompleted();
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
this.currentFirstVisibleItem = firstVisibleItem;
this.currentVisibleItemCount = visibleItemCount;
this.totalItem = totalItemCount;
}
private void isScrollCompleted() {
if (totalItem - currentFirstVisibleItem == currentVisibleItemCount
&& this.currentScrollState == SCROLL_STATE_IDLE) {
/** To do code here*/
}
});发布于 2015-02-26 20:21:44
最简单的选择
首先,您需要添加列表脚注并分配OnScrollListener
ProgressBar footer = new ProgressBar(this);
listView.addFooterView(footer);
listView.setOnScrollListener(scrollListener);而这个实现OnScrollListener
private AbsListView.OnScrollListener scrollListener = new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int lastInScreen = firstVisibleItem + visibleItemCount;
if(lastInScreen == totalItemCount && !isLoading){
loadMoreItems(totalItemCount - 1);
isLoading = true;
}
}
};服务器给了我10个元素的记录
下载完成后,isLoading会更改
totalItemCount - 1 start position(footer也是列表中的一个元素)
完成后,您需要向适配器adapter.addAll(list);添加新元素,并执行adapter.notifyDataSetChanged ();并将isLoading = false;
发布于 2015-02-26 20:37:22
如下所示:
public OnScrollListener scrollListener = new OnScrollListener()
{
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
{
if((firstVisibleItem + visibleItemCount) >= totalItemCount) && /*also maybe some condition else*/)
{
//here start next 10 items request
}
@Override
public void onScrollStateChanged(AbsListView arg0, int arg1) {
// TODO Auto-generated method stub
}
};如果您的服务器在每次休息时都像nextUrl一样给出下10个条目请求URL,那么您可以检查nextUrl是否为null,如果null意味着没有更多的条目可用,那么您可以检查condition else中是否没有。
最后,记住将listener设置为您的ListView:
yourListView.setOnScrollListener(scrollListener);https://stackoverflow.com/questions/28741645
复制相似问题