2011-10-12 75 views
0

如何使用我创建的自定义ListAdapter刷新ListActivity的内容?我在arrayadapter中有一个调用“notifyDataSetChanged();”的方法。这是行不通的。在这个网站上没有任何相关的解决方案。下面的代码迄今:如何获得此ListActivity更新信息?

private final Activity context; 
private Message[] messages; 

public RamRSSAdapter(Activity context, Message[] messages) { 
    super(context, R.layout.ram_rss_row); 
    this.context = context; 
    this.messages = messages; 
} 

// static to save the reference to the outer class and to avoid access to 
// any members of the containing class 
static class ViewHolder { 
    public ImageView imageView; 
    public TextView textView; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // ViewHolder will buffer the assess to the individual fields of the row 
    // layout 

    ViewHolder holder; 
    // Recycle existing view if passed as parameter 
    // This will save memory and time on Android 
    // This only works if the base layout for all classes are the same 
    View rowView = convertView; 

    //string code goes here 
    if (rowView == null) { 
     LayoutInflater inflater = context.getLayoutInflater(); 
     rowView = inflater.inflate(R.layout.ram_rss_row, null, true); 
     holder = new ViewHolder(); 
     holder.textView = (TextView) rowView.findViewById(R.id.label); 
     holder.imageView = (ImageView) rowView.findViewById(R.id.icon); 
     rowView.setTag(holder); 
    } else { 
     holder = (ViewHolder) rowView.getTag(); 
    } 

    holder.textView.setText(messages[position].getTitle()); 

    //code for image here 
holder.imageView.setImageResource(getImageResID(getType(messages[position].getTitle()))); 

    return rowView; 
} 
private String getType(String title){ 
    int i1 = title.indexOf("["); 
    int i2 = title.indexOf("]"); 
    if((i1==-1)||(i2==-1)){ 
     return ""; 
    }else{ 
     return title.substring(i1+1, i2); 
    } 
} 
public void changeData(Message[] newData){ 
    messages = newData; 
    notifyDataSetChanged(); 
} 
/* 
private int getImageResID(String type){ 
} 

}

回答

1

我还没有看到notifyDataSetChanged()做任何事情的情况。我刚刚根据最新信息获得了一个新适配器,并更改了ListView上的滚动位置,使其显示为简单更新。

0

您不应该直接覆盖数据数组,而应使用ArrayAdapter提供的clear/insert/add/addAll/remove方法。

+0

我找了他们,但找不到他们。我的ArrayAdapter的子类完全不能识别它们。 – user967514

+0

这是奇怪的 - 添加,删除清除和插入已经可用,因为API级别1,addAll只有自11。 –