我使用listview绑定适配器,首先我获取10条记录,然后当我滚动结束时再次列出listview中添加的项目,它完美无缺。
但是当我在滚动结束后添加项目时,那时项目成功添加,然后列表视图位置设置为顶部。我想将这个位置设置为新添加的项目。
这是我的代码:
onscroll功能:
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
new items().execute();
}
异步功能:
class items extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
...
}
protected String doInBackground(String... args) {
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("id", String.valueOf(id)));
JSONObject json = jParser.makeHttpRequest(url, "GET",
params);
try {
for (int i = 0; i < products.length(); i++) {
JSONObject c = products.getJSONObject(i);
// Storing each json item in variable
String id = c.getString(TAG_PID);
String name = c.getString(TAG_NAME);
Product item = new Product(name, imageurl);
product_name.add(item);
}
}
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
pDialog.dismiss();
adapter = new CategoryAdapter(context, product_name);
category_linear.setAdapter(adapter);
}
Baseadapter:
public class CategoryAdapter extends BaseAdapter {
Context context;
// protected List<String> m_List;
protected List<Product> rowItems;
public CategoryAdapter(Context context, List<Product> items) {
this.context = context;
this.rowItems = items;
}
public void addItemAll(List<Product> item) {
//
rowItems.addAll(item);
notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return rowItems.size();
}
@Override
public Object getItem(int position) {
return rowItems.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(final int position, View convertView,
ViewGroup parent) {
// TODO Auto-generated method stub
if (convertView == null) {
convertView = LayoutInflater.from(getActivity()).inflate(
R.layout.row, null);
}
Product rowItem = (Product) getItem(position);
TextView text = ViewHolderPattern.get(convertView, R.id.item_name);
text.setText(rowItem.getTitle());
return convertView;
}
}
现在,如何在添加新项目时设置滚动的位置。
目前,当添加新项目时,它将显示在列表视图的顶部。
但是我想把位置设置为新项目。
我该怎么做?
答案 0 :(得分:0)
每次在AsyncTask中执行代码时,都在创建适配器的新实例。即你的onPostExecute函数。而不是做
adapter = new CategoryAdapter(context, product_name);
category_linear.setAdapter(adapter);
你应该这样做
adapter.addItemAll(product_name);
adapter.notifyDataSetChanged();
同时写下以下内容
adapter = new CategoryAdapter(context, new List<Product>());
category_linear.setAdapter(adapter);
在您实例化ListView以使其正常工作之后。
数据将在您的列表中更新,您的位置将保持不变。
干杯!