listview第一次加载,显示正常,点击item进去也没有异常。下图是 第一次加载数据列表和点击 游记2 获得的数据点击查看更多,第二次加载。显示4个item。但是单击 第一次加载数据。发现 position 是第二次加载item。下图是 第二次加载更多 和点击 游记2的数据。但是这些数据是 准备就绪,上路 的。点击 准备就绪,上路 这个item的时候,提示数组越界。
这是我插入数据和点击item的代码adapter.java
public void addItem(Map<String, Object> load){
this.list.add(load);
 
Log.v("albumAdapter",String.valueOf(list.size()));
  
}
@Override
public int getCount() {
if(list.size()!=0)
{
return list.size();
}else{
return 0;
}
}  
@Override
public Object getItem(int position) {
 return list.get(position);
}  
@Override
public long getItemId(int position) {
 
return position;
}  
@Override
public View getView(int position, View convertView, ViewGroup parent) {
albumHolder holder=new albumHolder();;
 
if(convertView==null){
convertView=inflater.inflate(R.layout.album_item, null);
 
holder.covert=(ImageView)convertView.findViewById(R.id.album_item_covert);
holder.name=(TextView)convertView.findViewById(R.id.album_item_name);
holder.time=(TextView)convertView.findViewById(R.id.album_item_time);
holder.counts=(TextView)convertView.findViewById(R.id.album_item_count);

holder.covert.setScaleType(ScaleType.CENTER_CROP);

convertView.setTag(holder);//绑定ViewHolder对象                   
}else{
holder=(albumHolder)convertView.getTag();//取出ViewHolder对象
}
 
 
holder.name.setText(list.get(position).get("name").toString());
holder.counts.setText(list.get(position).get("counts").toString());
holder.time.setText(list.get(position).get("time").toString());

activity类
public void LoadData(){  //点击加载更多

//int count=adapter.getCount();

 
for(int i=0;i< album_list.size();i++){
Map<String, Object> map=new HashMap<String, Object>();
Album album_entity = album_list.get(i);
map.put("pid", album_entity.getPid());
map.put("name", album_entity.getName());
map.put("counts",album_entity.getCounts());
map.put("time", album_entity.getDate());
map.put("covert",album_entity.getCovert());
adapter.addItem(map);
}

}  下面是将数据显示在列表
 if (album_list.size()==0) {
 album_listview.onLoadMoreComplete(false);
 Error_Dialog(context, "没有数据更新");
}else{
 
//album_listview.setAdapter(adapter);
//adapter.notifyDataSetInvalidated();
try{
LoadData();

}catch (Exception e) {
e.printStackTrace();
}
adapter.notifyDataSetChanged();
//album_listview.setAdapter(adapter);
album_listview.setSelection(visibleLast - visibleCount + 1);
album_listview.onLoadMoreComplete(false);
}
 }
这是 点击item的代码
album_listview.setOnItemClickListener(new OnItemClickListener() {  
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// Album albums=album_list.get(position);
try {
pid=album_list.get(position-1).getPid();
 Log.v("albumActivity", pid);
 Intent intent=new Intent();
 Bundle bundle=new Bundle();
 intent.setClass(albumActivity.this, albumItemActivity.class);
 bundle.putString("pid", pid);
 intent.putExtras(bundle);
 startActivity(intent);
} catch (Exception e) {
e.printStackTrace();
}
 
麻烦看一下。现在卡在这里,我很急,在线等listview分页

解决方案 »

  1.   

    Activity类的LoadData函数里的map变量,在for循环结束后,它的内存空间会被释放,这是你错误的原因。ListView上的数据生命周期,你要让它跟Activity的生命周期一样长。
      

  2.   

    我也遇到LZ这样的问题,请问LZ咋解决的,急等啊!!!!!!!!!!!!
      

  3.   

    这个是因为加了headview 和footview 引起的把
    试试 mXListView.setOnItemClickListener(new OnItemClickListener() { @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
    if (arg2 == -1) {
    return;
    }
    try {
    ReacnnListView listView = (ReacnnListView) arg0;
    SupplierBean muUserCouponLog = (SupplierBean) listView
    .getItemAtPosition(arg2);
    if (listView != null && muUserCouponLog != null) {
    Intent mIntent = new Intent(getActivity(),
    FrmSupplierDetailsRelatedMsgActivity.class);
    mIntent.putExtra(
    SharedPreferencesFieldConfig.Skip_SupplierList_SupllierName,
    muUserCouponLog.getUsername()); mIntent.putExtra(
    SharedPreferencesFieldConfig.Skip_SupplierList_CompanyName,
    muUserCouponLog.getCompany());
    startActivity(mIntent);
    }
    } catch (Exception e) {
    LogUtil.e(TAG, "", e, false);
    }
    }
    });