2012-05-14 61 views
0

我有一個項目列表。他們每個人都有一組數據與TextView s顯示。這些數據大部分保持不變。但我有一個距離字段,我想更新,每當我從位置提供商獲得新的鎖定。更新所有適配器中的TextView - 最有效的方法

問題是:我應該只更新我的數據並在我的適配器上調用notifyDataSetChanged()或者是否有更有效的方法?

似乎重新加載所有列表(我有幾個人在ViewPager)僅僅因爲需要更新的每個項目一個TextView的非常昂貴的。

這是我的適配器getView()。這可能有助於:

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    if (convertView == null) { 
     convertView = mInflater.inflate(R.layout.eventrow, parent, false); 

     // Creates a ViewHolder and store references to the two children views 
     // we want to bind data to. 
     holder = new ViewHolder(); 

     holder.title = (TextView) convertView.findViewById(R.id.eventTitle); 
     holder.distance = (TextView) convertView.findViewById(R.id.eventDistance); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.title.setText(((EventItem) getItem(position)).getTitle()); 
    holder.distance.setText(String.valueOf(((EventItem) getItem(position)).getDistance())); 

    return convertView; 
} 

我也想過直接引用holder.distance但它似乎是一個壞主意,做外getView()

回答

1

修改您的數據的正確方法是更改​​您的列表項,然後致電notifyDataSetChanged()

我想到的唯一選擇是在列表視圖上再次設置適配器,這種方式比較昂貴。沒有其他方法。

所以答案是:你必須通過notifyDataSetChanged()

+0

我會等一天,也許有人可以添加一些東西,但如果這是要走的路,那就這樣吧(然後當然你會得到一個接受)。 –

+0

沒有麻煩@MichałK,希望它無論如何幫助。讓我知道你是否拿出了一些東西。謝謝 – gwa

+0

好吧,它當然有效,也許如果有更輕量級的選項,我會稍後改變它,但現在我想不出更好的解決方案。 –