0

我指的是Android ListView 刷新单行

但是,要使用上述链接技术,我必须ListView使ArrayAdapter.

目前,为了有一种非常优化的方式来更新显示ListView,我需要对我的ArrayAdapter

public PortfolioArrayAdapter(ListView listView, Activity activity, List<TransactionSummary> transactionSummaries) {
    super(activity, R.layout.portfolio_management_row_layout, transactionSummaries);
    this.activity = activity;
    this.listView = listView;
    ...
}

// Do not use notifyDataSetChanged, as it will refresh entire ListView.
// We only want to update certain row.
private void refreshView(final int row) {
    final int firstVisiblePosition = listView.getFirstVisiblePosition();
    final int lastVisiblePosition = listView.getLastVisiblePosition();
    if (row < firstVisiblePosition || row > lastVisiblePosition) {
        return;
    }
    this.activity.runOnUiThread(new Runnable() {
        public void run() {
            final View view = listView.getChildAt(row - firstVisiblePosition);
            // Refresh?
            getView(row, view, listView);                
        }
    });
}

但是,我觉得传递ListView引用很不舒服ArrayAdapter,因为我认为它们应该相互独立?(由于 MVC?)

有没有更好的方法可以让ListView 刷新单行

在 Java Swing 中,他们以一种非常简洁的方式做到了这一点。它们为表模型提供了以下方法。

fireTableCellUpdated(行,列);

因此,该模型可以告诉视图哪一行和哪一列受到影响,而无需知道视图是谁。

在 Andorid 中,我的模型 ( ArrayAdapter) 需要知道,ListView是视图,只有这样我的模型才能与视图对话。

4

1 回答 1

1

我不确定为什么您认为您的 ArrayAdapter 不应该能够引用您的 ListView。ListView 是您的 View 和 ArrayAdapter 您的模型,因此它们需要交互。来自维基百科:

当模型的状态发生变化时,模型会通知其关联的视图和控制器。此通知允许视图生成更新的输出,并且控制器可以更改可用的命令集

这不正是侦听器原理的工作原理吗,您将视图添加到侦听对象列表中并在任何更改时通知它们。

于 2012-07-28T17:47:59.737 回答