我指的是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刷新单行吗?
在JavaSwing中,他们以一种非常巧妙的方式完成了这项工作。它们为表格模型提供了以下方法。
fireTableCellUpdated(行,列);
因此,该模型可以告诉视图哪个行和列受到影响,而不知道视图是谁
在Andorid中,我的模型(ArrayAdapter
)需要知道,ListView
是视图,只有这样我的模型才能与视图对话。
我不知道你为什么认为你的ArrayAdapter不能引用你的ListView。ListView是您的View,ArrayAdapter是您的Model,因此它们需要交互。来自维基百科:
当存在它的状态发生了变化。此通知允许视图生成更新的输出,控制器更改可用的命令集
这不正是侦听器的工作原理吗?您将视图添加到侦听对象的列表中,并在任何更改时通知它们。