2012-12-07 75 views
1

我一直在尋找年齡並嘗試數月。我永遠不能讓我的觀點(任何觀點)無效。這裏有什麼問題,誰能告訴我?誰能告訴我如何使用這些無效的方法。提前致謝!notifyDataSetChanged從來沒有作品

   if(result.equals("true")) 
       { 
        View row = invoices.getChildAt(info.position); 
        //TextView bgr = (TextView) row.findViewById(R.id.status); 
        //bgr.setBackgroundResource(R.color.blue); 
        //row.setVisibility(View.GONE); 

        Animation anim = AnimationUtils.loadAnimation(Invoices.this, R.anim.down_to_top); 
        anim.setDuration(500); 
        invoices.getChildAt(info.position).startAnimation(anim); 
        final int row_pos = info.position; 

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

         public void run() { 

          /*row.getInstance().remove(
           FavouritesManager.getInstance().getTripManagerAtIndex(info.position) 
          );*/ 
          ListView invoices = (ListView) findViewById(R.id.allInvoices); 
          View row = invoices.getChildAt(row_pos); 
          row.setVisibility(View.GONE); 
          getAllInvoices(); 
          myAdapter.notifyDataSetChanged(); 

         } 

        }, anim.getDuration()); 

        Toast.makeText(getApplicationContext(), "Deleted!", Toast.LENGTH_SHORT).show(); 
       } 

更新: 這就是我現在得到的。它正確刪除視圖和動畫,但它仍然不會失效?

​​

回答

1

調用notifyDataSetChanged不工作的原因是因爲數據集沒有更改。您可以改變ListView本身的佈局。 ListView不超過保存數據的Adapter的表示。

要理解它是如何工作的,this post將解釋它。

應用上你的代碼將輸出是這樣的:(僞)

Handler { 
    lRow = mAdapter.get(row_pos); 
    lRow.setVisibilty(false); // visibility is a flag of the row object 
    mAdapter = notifyDataSetChanged(); 
} 

內部適配器:

getView() { 
    if (row.getVisibility){ 
     // do stuff 
    } else { 
     // do other stuff 
    } 
} 
+1

更新後的問題:)它刪除了所有內容,但仍然無效,所以我在ListView中間有個洞,呵呵。 **編輯:**我剛剛從我的HashMap中刪除項目,這可能是爲什麼它不工作......但是我怎麼把它從適配器中刪除? –

+1

您將某種集合提供給適配器。例如一個數組,一個List,一個HashMap。在適配器內部,您可以控制ListView如何在其視圖中顯示數據。如果從提供給適配器的集合中刪除對象,則可以使用notifyDataSetChanged刷新適配器,然後他將輪到更新ListView。 – DroidBender

0

嘿你檢查你的處理程序運行()你再次創建ListView,而不是設置適配器。您可能會通知適配器,但是在創建另一個對象時該適配器未設置爲Listview。我不知道你的getAllInvoices()會做什麼,但我確信你沒有將適配器設置爲listview,所以它永遠不會收到通知。根據你的代碼,你甚至不能在getAllInvoices()中設置適配器,因爲listview是局部變量。

+1

但我使用同一個適配器,在運行ListView控件()是隻用於查看我需要隱藏哪一行。此外,我只是試圖讓我的ListView在onCreate之外,然後在onCreate中初始化它,然後在其他地方使用它,但這也不起作用。 –