2014-02-15 44 views
0

我有一個Listview。每個項目都有多個字段,如標題,圖像,說明和圖像。我擴大了Baseadapter,因此填充了listview。任務是自我刪除該項目。即在秒數(給定時間)後從ListView中刪除項目android:如何從列表視圖中銷燬項目

我試圖通過附加timer與項目,但它會拋出錯誤,而且我發現這不是正確的方法。請幫我解決這個問題。

讓說的數據如下

Title ¦ Description ¦ Image ¦ time 
alpha1 ¦ this is the description of alpha 1 ¦ images/abc.jpg ¦ 56858 
alpha2 ¦ this is the description of alpha 2 ¦ images/abc.jpg ¦ 63 
alpha3 ¦ this is the description of alpha 3 ¦ images/abc.jpg ¦ 3600 

這裏的項目有定秒後死亡(死亡從某種意義上說,它從列表中刪除)

+0

默認情況下,listview只加載可以在移動設備屏幕上容納的數據。 – amalBit

+0

感謝評論amalBit。可能是我無法提供我的任務,所以我已經更新了這個問題。 – user98239820

+0

您的問題現在已清楚。 – amalBit

回答

0

比方說,你有一個指針到列表的對象。然後運行如下:

new Handler().postDelayed(new Runnable() { 

    @Override 
    public void run() { 
     myListViewArrayOfItems.remove(index); 
     myListViewAdapter.notifyDataSetChanged(); 
    } 
}, numberOfSeconds); 

而且你可以在適配器removeItem(final int index)您運行

myListViewArrayOfItems.remove(index); 
notifyDataSetChanged(); 

聲明的方法如果numberOfSeconds是隨機的和刪除操作需要可用於取消:

public class RemoveRunnable implements Runnable { 

    public interface RemoveListener { 
     void onItemRemoved(int index); 
    } 

    private BaseAdapter mAdapter; 
    private int mIndexToRemove; 
    private RemoveListener mListener; 

    public RemoveRunnable(BaseAdapter adapter, int index, RemoveListener listener) { 
     mAdapter = adapter; 
     mIndexToRemove = index; 
     mListener = listener; 
    } 

    public void run() { 
     mAdapter.removeItem(mIndexToRemove); 
     mListener.onItemRemoved(mIndexToRemove); 
    } 

    public void updateIndex(int removedIndex) { 
     if (removedIndex < mIndexToRemove) { 
      mIndexToRemove--; 
     } 
    } 
} 

與用法:

private Handler mHandler = new Handler(); 
private List<RemoveRunnable> mRunnables = new ArrayList<RemoveRunnable>(); 

private void removeItem(final int index, final int delay) { 
    Runnable runnable = new RemoveRunnable(myAdapter, index, this); 

    mRunnables.add(runnable); 

    mHandler.postDelayed, delay); 
} 

private void cancelAllRemovals() { 
    mHandler.removeCallbacksAndMessages(null); 
} 

@Override 
public void onItemRemoved(final int index) { 
    mRunnables.remove(index); 

    // Update rest indexes 
    for (int i=0; i < mRunnables.size(); i++) { 
     mRunnables.get(i).updateIndex(index); 
    } 
} 
+0

謝謝Niko的回答。但問題是時間去銷燬每個項目是不同的。項目1將在5秒內死亡,然後在10分鐘內項目2和在5分鐘內項目3。時間不固定。當我也刷新列表以獲取更多數據時,我將不得不刪除所有定義的計時器。 – user98239820

+0

好的,那麼代碼會稍微複雜一點,我目前沒有訪問IDE的權限,所以不能通過內存從頭開始編寫代碼,但是我可以更新一些關鍵點來回答這個問題,它可以告訴你方式。 – Niko

+0

感謝您的努力@Niko。我會嘗試這個答案並回復你。謝謝 – user98239820