2012-07-21 64 views
14

我使用ActionBarSherlock在我的Android應用中實現ActionMode。 使用ABS可以在API 11之前構建ActionMode,但使用以下方法可以輕鬆實現: listView.setMultiChoiceModeListener(new MultiChoiceModeListener() ... 不適用於API 11之前的應用程序。012xx有沒有人在API 11之前構建動作模式上下文菜單? 我想長時間點擊一個List Item並啓動ActionMode,我可以在其中點擊多個項目。在一個簡單的點擊我顯示列表項的詳細網站。 我使用registerForContext()方法,但是這樣做只需點擊一下即可。API之前的MultiChoiceMode 11

有沒有人給我一個好的提示。

編輯
我的問題將溶液如下:在一個長期的項目點擊我主動的動作模式,並保存在一個變量。在項目上點擊方法我實現的if-else語句:

if(actionMode == null) 
{ 
    // open new activity or update second fragment 
    showDetails(itemPosition); 
} 
else 
{ 
    // update ui or close CAB if no item selected 
    showCAB(itemPosition); 
} 

的方法showCAB(位置)更新將selectedItem計數,突出項目的背景等等。

回答

12

好吧,我只是今天的表現,這要歸功於網站:http://www.miximum.fr/tutos/849-porting-the-contextual-anction-mode-for-pre-honeycomb-android-apps

基本上,你只需要你的ListView ChoiceMode設置爲ListView.CHOICE_MODE_MULTIPLE,設置onItemClickListener將檢查ListView控件進行檢查哪些項目和創建一個實現ActionMode.Callback的私人類,它將管理上下文ActionBar。

我讓你去那個博客上看到一切細節,和一些代碼!

+0

謝謝你的回答。我昨天也發現了這個頁面並實施瞭解決方案。我將onItemClickListener更改爲onItemLongClickListener,但運行情況並不理想。我可以在短時間點擊一個項目後啓動ActionMode,關閉我打開的活動,然後再次按下該項目。解決方案並不完美,但一開始就很好。 – Happo 2012-07-23 05:36:08

+0

如果我對你的問題了解得很清楚,那麼它只是簡單地點擊你的ListView的項目而打開你的活動?然後,在你的'onItemLongClickListener'上,你可以將'listView' onItemClickListener'設置爲null,這樣它就不會打開任何活動。請確保將其設置回原來的'onItemClickListener'(可以將其保存在一個變量中)在'ModeCallback'類的'onDestroyActionMode'上 – MagicMicky 2012-07-23 11:13:05

+0

在調用onItemClick方法之前,事件傳遞了onItemLongClick方法。這個方法返回一個布爾值,所以如果我返回true事件被處理,並沒有達到onItemClick方法。如果我返回false,我沒有處理長時間點擊並進行其他類型的點擊。我在其他一些問題中發現了這一點,但您的解決方案也是可行的我今天稍後再測試一下。 – Happo 2012-07-23 11:51:07

5

你也可以看看Google I/O 2012 App。它是開源的,並使用ActionBarSherlock。他們開發了兼容性版本ActionMode相關的類,可以很好地與ABS和預蜂窩設備配合使用。

特別地,看看:

基本上,就像ABS一樣,在ActionMode可用時使用本機實現,並回退到舊設備上的自定義實現。

希望它有幫助!

+0

您的信息非常有幫助,謝謝。當從appcompat v7包中使用ActionMode和ActionBarActivity時,我發現這個文件也很有用。 http://iosched.googlecode.com/git/android/src/main/java/com/google/android/apps/iosched/ui/MultiSelectionUtil.java – 2014-09-07 02:27:37

相關問題