Android ListView Refresh Single Rowを参照しています
ただし、上記のリンク手法を使用するには、 に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 Refresh Single Rowを許可するより良い方法はありますか?
Java Swing では、かなりきちんとした方法でそれを行いました。これらは、テーブル モデルに次のメソッドを提供します。
したがって、そのモデルは、ビューが誰であるかを知らなくても、どの行と列が影響を受けているかをビューに伝えることができます。
Andorid では、私のモデル ( ArrayAdapter
) がビューであることを知る必要があります。そうして初めて、私のモデルListView
はビューと対話できます。