回答
你可以,但它有點複雜。您必須獲取列表中第一個可見項目的索引,然後使用它來確定該項目需要更新的可視項目列表的距離,然後獲取其視圖並在那裏更新它。
只需撥打notifyDatasetChanged()
就容易多了。你
以及如何獲得列表中第一個項目的索引?可能有性能的原因,爲什麼刷新整個列表是不可取的 – Marchy 2012-03-31 03:14:02
你只需要在ListView上調用'getFirstVisiblePosition()'。 http://developer.android.com/reference/android/widget/AdapterView.html#getFirstVisiblePosition() – CaseyB 2012-04-02 16:56:59
@CaseyB可以幫助我解決這個問題http:// stackoverflow。com/questions/18312539/update-the-value-of-item-in-the-listview-android?noredirect = 1#comment26873838_18312539 – Developer 2013-08-19 12:36:20
也可以使用此:
myListView.invalidateViews();
似乎不起作用。 – manmal 2012-02-27 11:17:03
它可以工作,但大部分時間都會延遲重繪所有頁面。 – AVEbrahimi 2015-02-10 07:05:51
dataAdapter.remove(dataAdapter.getItem(clickedpos));
dataAdapter.insert(t.getText().toString(), clickedpos);
你需要保持你的適配器的軌道(或定製適配器如果您在花哨的功能設置)。當您更改項目的數據時,只需在適配器中更改您感興趣的字段。 然後調用notifyDatasetChanged,這些更改將反映在您的列表視圖中。
請注意,此方法對於圖庫視圖也完全相同。
你不能渲染(刷新)單行,而是你可以得到所要求的視圖,並直接通過調用yourListView.getChildAt(int VisiblePosition);
,其中visiblePostion是在ListView減去位置yourListView.getFirstVisiblePosition()
這個方法使它chages :
View v = listViewItems.getChildAt(position -
listViewItems.getFirstVisiblePosition());
v.setBackgroundColor(Color.GREEN);
我希望這有助於...
當然,它確實有幫助..感謝很多 – 2013-06-11 18:04:00
+1:這正是我正在尋找。 – PeteH 2013-06-16 21:34:56
+10這真的在我的應用程序中節省了很多實施 – 2014-02-24 15:55:28
這是我做的:
您的項目(行)必須具有唯一的ID,以便稍後進行更新。當列表從適配器獲取視圖時,設置每個視圖的標記。 (您也可以使用鍵標籤如果默認標籤用於其他地方)
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
View view = super.getView(position, convertView, parent);
view.setTag(getItemId(position));
return view;
}
對於更新檢查列表的每一個元素,如果與給定id的看法是有它的可見的,必須對其執行更新。
private void update(long id)
{
int c = list.getChildCount();
for (int i = 0; i < c; i++)
{
View view = list.getChildAt(i);
if ((Long)view.getTag() == id)
{
// update view
}
}
}
它實際上比其他方法更容易,當你處理ID不是位置時更好!此外,您必須考慮情景,以便您的視圖再次隱身並可見。
標籤的想法幫助我解決了這個問題 - 我從同一個佈局文件中獲得動態數量的視圖,並且不得不以某種方式檢查我是哪一個改變。 – JakeP 2014-07-23 11:02:04
- 1. 刷新列表視圖項目android
- 2. 是否有可能在一個expandable的標題中的項目列表視圖
- 3. 是否可以重新排列列表視圖中的項目?
- 4. 是否有可能安排列表視圖項目作爲Android中的瓷磚
- 5. 是否有可能選擇一個自定義列表視圖項目與其列表項目ID而不是Android中的列表項目位置?
- 6. 刷新tabbed android項目中所有選項卡的列表視圖?
- 7. 列表視圖刷新android
- 8. Android列表視圖刷新
- 9. 刷新Android列表視圖
- 10. Android列表視圖刷新
- 11. 如何刪除一個項目並刷新列表視圖
- 12. 是否有可能在Android中重新使用一組視圖?
- 13. 是否可以刷新ListView中的一個項目而不刷新整個列表?
- 14. 是否有可能在另一個嵌套列表視圖?
- 15. 是否有可能在同一個視圖上有微調和列表視圖?
- 16. android自動刷新列表視圖項目
- 17. 在Android中刷新列表視圖
- 18. 是否有可能在Android的一個項目中有兩個以上的包?
- 19. 列表視圖項目android
- 20. 是否有可能在1 Android中有2個項目?
- 21. 如何刷新Android的列表視圖
- 22. 是否有可能在一個listView項目中有兩個TextView?
- 23. 是否有可能讓兩個項目共享一個主視圖?
- 24. 兩個按鈕更新列表視圖中的一個項目
- 25. 是否有可能從列表中的項目獲取索引?
- 26. 刪除Android Studio中的項目後刷新列表視圖的問題
- 27. 是否有可能從控件的視圖模型訪問列表視圖項目模板中的屬性?
- 28. 如何刷新從另一個選項列表中的列表視圖
- 29. 是否有可能從參數列表中刪除一個項目?
- 30. 是否有可能在QTableWidget中只能選擇一個項目
確實,notify ...告訴列表適配器已被修改。我不確定你可以更新一個元素。 – Sephy 2010-06-01 21:46:41
這裏有一個類似的SO問題:http://stackoverflow.com/questions/3724874/android-update-single-item-in-list – 2010-12-21 19:28:14
的Google,要注意**這些問題是非常非常古老的**。對於現代Android(2014+),您只需使用notifyDatasetChanged。它效率非常高,只能重畫屏幕上的內容。這些天使用現代「HolderView」模式至關重要。所以這都不是問題。 – Fattie 2014-06-26 14:42:44