の助けにより、すべての可視アイテムを横断することができます。それは少しトリッキーですが、基本的に次の3つが必要です。メタデータ
目に見えるが見つかった巧妙なアルゴリズムを投げつけ、ユーザーがスクロールを停止したときを教えてくれるスクロールリスナーを/収集
- アンAsyncTaskを
:これは私が設計し、それを実装する方法がある特定の行
更新のみにアダプタを更新する必要がありますと尋ねる行
詳しくはit hereと書いてありますが、詳しい説明はgithub codeをご覧ください。
private class UpdaterAsyncTask extends AsyncTask<Void, Void, Void> {
boolean isRunning = true;
public void stop() {
isRunning = false;
}
@Override
protected Void doInBackground(Void... params) {
while (isRunning) {
// Gather data about your adapter objects
// If an object has changed, mark it as dirty
publishProgress();
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return null;
}
@Override
protected void onProgressUpdate(Void... params) {
super.onProgressUpdate();
// Update only when we're not scrolling, and only for visible views
if (mScrollState == OnScrollListener.SCROLL_STATE_IDLE) {
int start = mListview.getFirstVisiblePosition();
for(int i = start, j = mListview.getLastVisiblePosition(); i<=j; i++) {
View view = mListview.getChildAt(i-start);
if (((Content)mListview.getItemAtPosition(i)).dirty) {
mListview.getAdapter().getView(i, view, mListview); // Tell the adapter to update this view
}
}
}
}
}
こんにちは、私はそれを作ろうとしますが、私は鉛を持っています。 BackButtonを押すと、dlが続行されます(これが私の望みです)が、このビューに戻ると、progressBarsは移動しません。あなたはあなたのアダプターの例を載せることができますか?あなたが背中を押して同じ見方に戻るとき、それは私のように機能しますか? – Cocorico
はい、「アクティビティ」が開始されたとき、および(休止状態から)アクティビティを再開したときに機能します。ここでソースコードの 'private void refreshScreen()'を見てください:https://github.com/slidese/SGU/blob/master/src/se/slide/sgu/StartActivity.java – Mike