我想增加列表视图滚动到末尾时动态显示的项目数。就我而言,我的列表视图最初将显示 10 个项目。然后当我们滚动到最后一个项目时,它必须开始显示另外 10 个项目,依此类推。我怎样才能做到这一点??
这是我的自定义数组适配器
package com.android.listview;
import java.util.ArrayList;
import com.android.listview.R;
import com.android.listview.Product;
import android.widget.ArrayAdapter;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.android.listview.ListViewActivity;
public class CustomArrayAdapter extends ArrayAdapter<Product> implements
OnScrollListener {
private final Context context;
private final ArrayList<Product> values;
static class ViewHolder {
public TextView text;
public ImageView image;
}
public CustomArrayAdapter(Context arg0, int arg1, int arg2,
ArrayList<Product> arg3) {
super(arg0, arg1, arg2, arg3);
this.context = arg0;
this.values = arg3;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
int product_id = 0;
View rowView = inflater.inflate(R.layout.feed_items, parent, false);
try {
ImageView wic_logo = (ImageView) rowView.findViewById(R.id.logo);
TextView label = (TextView) rowView.findViewById(R.id.label);
Product p = values.get(position);
product_id = p.productId;
String date = new java.text.SimpleDateFormat("dd/MM/yy")
.format(new java.util.Date(p.timeStamp));
label.setText(p.productName + "\n" + p.reportedPrice + " MRP: "
+ p.mrp + "\n" + "Discount: " + p.discount + "% "
+ p.area + " " + p.city + "\n" + "Shared by " + p.userName
+ " " + "on" + " " + date);
wic_logo.setImageResource(R.drawable.wic_logo_small);
Log.d("date", "" + date);
Log.d("Custom Array Adapter", "at" + position);
} catch (Exception e) {
Log.d("Custom Array Adapter", "catch");
}
return rowView;
}
public void onScroll(AbsListView arg0, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
Log.d("entered onScroll", " " + firstVisibleItem + visibleItemCount
+ totalItemCount);
if (((firstVisibleItem + visibleItemCount) >= totalItemCount - 1)) {
Log.d("entered if", " " + firstVisibleItem + visibleItemCount
+ totalItemCount);
// if we're at the bottom of the listview, load more data
addData(totalItemCount, values.get(totalItemCount).productId);
}
}
private void addData(int totalItemCount, int productId) {
Toast.makeText(getContext(), "last item", Toast.LENGTH_SHORT).show();
}
public void onScrollStateChanged(AbsListView arg0, int arg1) {
}
}
这是我的活动
package com.android.listview;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.android.listview.CustomArrayAdapter;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.Button;
import android.widget.ListView;
public class ListViewActivity extends Activity {
static Product[] feed_products_list;
private JSONArray JArray;
private InputStream is;
private StringBuilder sb;
private String result;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button feed_button = (Button) findViewById(R.id.feedButton_feed);
feed_button.setBackgroundResource(R.color.grey);
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
try {
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://10.0.2.2/wic2/mobile/feed");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
ResponseHandler<String> responseHandler = new BasicResponseHandler();
HttpResponse response = httpclient.execute(httppost);
HttpEntity entity = response.getEntity();
is = entity.getContent();
try {
BufferedReader reader = new BufferedReader(
new InputStreamReader(is, "iso-8859-1"), 8);
sb = new StringBuilder();
sb.append(reader.readLine() + "\n");
String line = "0";
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
result = sb.toString();
Log.d("result", result);
} catch (Exception e) {
Log.e("error", "Error in http connection" + e.toString());
}
Log.e("response", "response is:" + response.toString());
} catch (Exception e) {
Log.e("error", "Error in http connection" + e.toString());
}
ListView tv = (ListView) findViewById(R.id.feedListView);
try {
Log.d("JArray", "entered try");
JArray = new JSONArray(result);
int length = JArray.length();
feed_products_list = new Product[length+1];
Log.d("JArray", "try last line");
} catch (JSONException e) {
Log.d("JArray", "in catch");
e.printStackTrace();
}
JSONObject jsonObj;
for (int i = 0; i < JArray.length(); i++) {
try {
Log.d("jsonObj", "entered try");
jsonObj = JArray.getJSONObject(i);
} catch (Exception e) {
Log.d("jsonObj", "in catch");
continue;
}
try {
Log.d("feed_products_list", "entered try");
feed_products_list[i] = new Product(jsonObj.getInt("id"),
jsonObj.getString("image"),
jsonObj.getString("product_name"),
jsonObj.getString("reported_price_formated"),
jsonObj.getString("store_area"),
jsonObj.getString("store_city"),
jsonObj.getString("mrp"),
jsonObj.getString("user_name"),
jsonObj.getLong("reported_timestamp"),
jsonObj.getInt("discount"));
Log.d("feed_products_list", feed_products_list[i].productName);
} catch (JSONException e) {
Log.d("feed_products_list in catch",
feed_products_list[i].productName);
e.printStackTrace();
}
}
tv.setAdapter(new CustomArrayAdapter(this, R.layout.feed_items,
R.id.label, feed_products_list));
}
}
还有一个问题是我必须用 JArray 中的项目数来初始化我的数组 feed_products_list[length]。所以每次滚动到最后一项并重新填充整个列表时,我都无法更改数组大小