2013-01-12 14 views
2

我想在我的應用程序使用上下文操作欄(CAB),但不與舊版本的Android所以我使用本教程兼容:http://www.miximum.fr/tutos/849-porting-the-contextual-anction-mode-for-pre-honeycomb-android-apps 我的代碼是:如何使用上下文動作模式SherlockListFragment

public class SongsFragment extends SherlockListFragment implements 
    LoaderManager.LoaderCallbacks<Cursor>, OnLongClickListener{ 

... 
@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    activity = this.getActivity(); 
    ... 
    mMode = null; 
    mListView = getListView(); 
    mListView.setItemsCanFocus(false); 
    mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); 
    mListView.setOnLongClickListener(this); 

} 

@Override 
public boolean onLongClick(View v) { 
    SparseBooleanArray checked = mListView.getCheckedItemPositions(); 
    boolean hasCheckedElement = false; 
    for (int i = 0; i < checked.size() && !hasCheckedElement; i++) { 
     hasCheckedElement = checked.valueAt(i); 
    } 

    if (hasCheckedElement) { 
     if (mMode == null) { 
      mMode = activity.startActionMode(mActionModeCallback); 
     } 
    } else { 
     if (mMode != null) { 
      mMode.finish(); 
     } 
    } 
    return false; 
} 

private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { 

    @Override 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) { 
     // Create the menu from the xml file 
     activity.getSupportMenuInflater().inflate(R.menu.cab_songs, menu); 
     return true; 
    } 
    ... 

我有錯誤:

  1. - 「activity.startActionMode(mActionModeCallback);」:在類型活性的方法startActionMode(ActionMode.Callback)不 適用於參數(ActionMode.Callback)
  2. -activity.getSupportMenuInflater()膨脹(R.menu.cab_songs,菜單);「:該方法getSupportMenuInflater()是未定義的 類型FragmentActivity

任何想法?還有另一種使用sherlock的CAB解決方案嗎?

+0

這就是我做到這一點http://stackoverflow.com/questions/14737519/implementing-multi-selection-and-contextual-actionmode-in-actionbarsherlock/14737520#14737520 –

回答

2

將您的進口ActionModeMenuInflater更改爲其ActionBarSherlock等效項(com.actionbarsherlock.view.ActionModecom.actionbarsherlock.view.MenuInflater)。

2

我解決了使用:

getSherlockActivity().startActionMode(mActionModeCallback); 
... 
mode.getMenuInflater().inflate(R.menu.cab_songs, menu); 

現在,我想要做一個動作,當用戶執行「點擊」,當用戶執行「長按」另一個動作。我有「onItemLongClick」和「onListItemClick」,但有時longClick不會被調用,如果我釋放「onListItemClick」被調用,它會被調用。我怎樣才能做到這一點?

相關問題