我已經實現了gallery和listview。 畫廊有圖像,當我點擊圖像使用setOnItemSelectedListener Listview更新,其中有關於圖像選擇的信息。Android圖庫視圖監聽器添加延遲?
問題:當我快速滾動畫廊時,它會迅速更新我的列表視圖。但據我所知,listview應該等待圖庫停止移動任何一個圖像,然後更新其內容。
任何人都知道如何做或在更新listview之間添加時間?請幫忙..
我已經實現了gallery和listview。 畫廊有圖像,當我點擊圖像使用setOnItemSelectedListener Listview更新,其中有關於圖像選擇的信息。Android圖庫視圖監聽器添加延遲?
問題:當我快速滾動畫廊時,它會迅速更新我的列表視圖。但據我所知,listview應該等待圖庫停止移動任何一個圖像,然後更新其內容。
任何人都知道如何做或在更新listview之間添加時間?請幫忙..
你可以嘗試setOnItemClickListener來代替。只有在實際「點擊」圖像時纔會觸發它,而不僅僅是選擇它。
gallery.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
// Do what you want
}
});
更新:
如果你想延遲一個動作,而不是onItemClickListener實現,你有(至少)兩種選擇。一種是使用超時(Thread.sleep())運行單獨的線程,在完成之後,您可以使用Handler來更新您的活動狀態。另一個選擇是使用AsyncTask,這在技術上是相同的方法,它只將Runnable任務和Handler包裝在一個內部類中。最簡單的實現可能是這樣的:
ListUpdater listUpdater;
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) {
// We have to run this thread to add delay before updating activity views
if (listUpdater != null) { // Cancel previous task
listUpdater.cancel(true);
}
if (listUpdater == null || position != listUpdater.getPosition()) {
listUpdater = null;
listUpdater = new ListUpdater(position);
listUpdater.execute();
}
}
class ListUpdater extends AsyncTask<String, String, String> {
private int position;
public int getPosition() {
return position;
}
public ListUpdater(int position) {
this.position = position;
}
@Override
protected String doInBackground(String... params) {
try {
Thread.sleep(600); // set delay time here
} catch (InterruptedException e) {
}
return null;
}
@Override
protected void onPostExecute(String result) {
if (!isCancelled()) {
// If another thread is not running,
// that is if another item was not selected,
// update the activity
// Add code here to update the activity
// This method works in UI Thread, so you don't need to use Handler
// For example:
Toast.makeText(YourActivity.this, "" + position, Toast.LENGTH_SHORT).show();
}
super.onPostExecute(result);
}
}
這是一個實現延遲的例子。沒有必要精確地滿足您的需求,但是您可以從中獲得一些如何實現的想法。
無需實現setOnItemSelectedListener的,實行OnItemClickListener:
Gallery g = (Gallery) findViewById(R.id.gallery);
g.setAdapter(new ImageAdapter(this));
g.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show();
}
});
onItemClickListener不符合我的應用程序需求..而滾動畫廊圖像時,它應該自動更新列表視圖。而不是通過點擊圖片。但它應該等待(可能是1秒),然後不立即更新列表視圖。 – rohit
得到參照使用的AsyncTask morphium的解決方案後,我的工作,但是,我發現有多個來電者的問題(例如:OnHierachyChangeListener和OnItemSelectedListener)。第二個調用者將取消第一個任務,並且如果他們保持相同的位置,則不會啓動新任務,導致第一個更新任務失敗。
它與
這是我的代碼版本
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long arg3) {
// We have to run this thread to add delay before updating activity views
if (listUpdater != null) { // Cancel previous task
listUpdater.cancel(true);
}
listUpdater = new ListUpdater(position);
listUpdater.execute();
}
我的代碼只是停止前面的任務,並開始一個新的,無論前一個和當前的位置。爲了安全起見,你也可以使它成爲一個同步方法
我的應用程序需要的是,當圖像被選中(而不是點擊)它會自動更新列表視圖(如android中的壁紙選擇)。此外它現在正在做喜歡壁紙選擇。但我只是希望它應該在更新listview之前等待1秒(如它在android中的壁紙選擇中等待) – rohit
請檢查我所做的更新。 – morphium
我會嘗試一下,並讓你知道..謝謝你:) – rohit