2012-04-04 80 views
5

我想要一個ListView,當我點擊該項目時,視圖向左滑動。如何在點擊時在ListView中動畫項目?

所以我必須:

listView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      arg1.startAnimation(openAnimation); 
     } 
    }); 

然而,動畫應用到不同的項目列表,而不是一個被點擊。這種行爲似乎是隨機的,因爲它發生在同一時間不止一個項目。

正如我懷疑這是因爲適配器重用它的視圖來創建項目的方式。我去修改適配器中的getView方法,以在每次調用新的視圖時使其膨脹。然後動畫不再發生。

有沒有辦法解決這個問題?我試圖將動畫移動到適配器中,但是我無法將其與Listview上的其他操作關聯。

最終,我希望項目是可點擊的,但當左/右滑動顯示刪除按鈕(iOS刪除行爲)。我在這裏錯了嗎?這應該是可能的,但Android可以在通知欄中實施滑動刪除。

+0

「iOS刪除行爲」否否否否! Android不是iOS!請不要使用iOS設計模式。 Android用戶期望和Android用戶體驗NOT和iPhone體驗。 – slayton 2012-04-04 17:44:26

+0

我明白你的關注。我完全反對這個想法。但我不是在這裏做決定的人。但是你必須承認它,但是在Android上,輕掃即可刪除。實施在那裏,只是不同的演示。 – RobGThai 2012-04-04 17:48:29

+0

通知窗格可能有一個自定義的listview實現,因爲基本的listview類不支持這個swipe來刪除行爲 – slayton 2012-04-04 17:51:09

回答

1

我建議你也檢查this線程。

我不認爲,這是可能的,而無需修改適配器以適應此類行爲。據我所知,在實現識別不同列表視圖行上的滑動手勢的代碼時,您不會遇到任何問題,只有通過動畫才能在相應行上遵循此手勢。

我會重寫適配器以適應至少2種行類型:普通行和要刪除的行。在適配器的「getView()」方法中,您應該只重用正常視圖的convertView。要刪除的行不應重複使用,因此動畫不會修改其他行。 單擊正常行時,應首先告訴適配器,單擊位置上的行現在是待刪除類型,調用.notifyDatasetChanged(),然後在該行上啓動動畫。

+0

如何在該行上啓動一個動畫?我是View v = inflater.inflate(R.layout.list_view_custom,null);然後在一個監聽器裏我有 final Animation animation = AnimationUtils.loadAnimation(parent.getContext(),R.anim.fade_in_expand); v.startAnimation(animation); 但沒有任何反應。 – MinceMan 2012-11-25 18:55:34