Android ListView刷新单行-我应该从ArrayAdapter隐藏ListView吗



我指的是Android ListView刷新单行

然而,要使用上述链接技术,我必须使ListViewArrayAdapter可见。

目前,为了有一种非常优化的方式来更新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刷新单行吗?

在JavaSwing中,他们以一种非常巧妙的方式完成了这项工作。它们为表格模型提供了以下方法。

fireTableCellUpdated(行,列);

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

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

我不知道你为什么认为你的ArrayAdapter不能引用你的ListView。ListView是您的View,ArrayAdapter是您的Model,因此它们需要交互。来自维基百科:

当存在它的状态发生了变化。此通知允许视图生成更新的输出,控制器更改可用的命令集

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

最新更新