2

アプリで Contextual Action Bar (CAB) を使用したいのですが、古いバージョンの Android と互換性がないため、このチュートリアルを使用しています: http://www.miximum.fr/tutos/849-porting-the-contextual- anaction-mode-for-pre-honeycomb-android-apps 私のコードは次のとおりです。

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);": タイプ Activity のメソッド startActionMode(ActionMode.Callback) は、引数 (ActionMode.Callback) には適用されません。
  2. -activity.getSupportMenuInflater().inflate(R.menu.cab_songs, menu);": メソッド getSupportMenuInflater() は型 FragmentActivity に対して未定義です

何か案が?sherlockを使用したCABの別のソリューションはありますか?

4

2 に答える 2

2

私は次を使用して解決しました:

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

ここで、ユーザーが「クリック」したときにアクションを実行し、ユーザーが「ロングクリック」したときに別のアクションを実行したいと考えています。「onItemLongClick」と「onListItemClick」を使用しましたが、longClick が呼び出されないことがあり、呼び出されたときに「onListItemClick」を解放すると呼び出されます。このアクションを実行するにはどうすればよいですか?

于 2013-01-13T12:10:49.773 に答える
2

ActionModeとのインポートをMenuInflaterActionBarSherlock に相当するもの (com.actionbarsherlock.view.ActionModecom.actionbarsherlock.view.MenuInflater) に変更します。

于 2013-01-12T19:18:22.800 に答える