Как запустить ActiveForResult с помощью android-actionBar? - PullRequest
2 голосов
/ 27 июня 2011

Я использую android-actionbar (https://github.com/johannilsson/android-actionbar), чтобы создать панель действий в моем приложении. Для добавления кнопки (действия) я использую этот код:

Intent myIntent = new Intent(this,SelectionCamera.class);
myIntent.putExtra("ledp",(Parcelable)Dp);
myIntent.putExtra("cam",this.numCam );
IntentAction actionCam = new IntentAction(this, 
                myIntent, 
                R.drawable.ic_camera
            );
actionBar.addAction(actionCam);

Это работает просто отлично, но мне нужно запустить упражнение и получить от него результат (startActivityForResult ()). Это кажется легким с mimic-native-api branche, но я бы не стал менять свою версию actionBar. Любое решение?

1 Ответ

3 голосов
/ 27 июня 2011

Редактировать: В настоящее время я рекомендую использовать ActionBarSherlock вместо android-actionbar.Он позволяет использовать встроенную панель действий Android на новых устройствах и обеспечивает полную совместимость API со старыми.


Оригинальный ответ:

Я бы порекомендовал имитировать-native-api ветка, она более свежая и имеет некоторые очень полезные функции, такие как возможность определять действия из XML.(Я использую его в большом проекте, и он работает великолепно.)

Однако вы должны быть в состоянии сделать это в основной ветке, создав собственную реализацию AbstractAction - например, добавьте другой класс, похожий наIntentAction вызвало «ResultAction» и заставило его использовать mContext.startActivityForResult (mIntent) вместо mContext.startActivity (mIntent).Вам также необходимо сохранить код запроса, который вы хотите отслеживать, в своем onActivityResult.

Некоторые полностью непроверенные пример кода:

public static class ResultAction extends ActionBar.AbstractAction {
    private Context mContext;
    private Intent mIntent;
    private int mRequestCode;

    // note: you could use this to start activities normally (with no result)
    //       by using a negative value for requestCode.
    public ResultAction(Context context, Intent intent, int drawable, int requestCode) {
        super(drawable);
        mContext = context;
        mIntent = intent;
        mRequestCode = requestCode;
    }

    @Override
    public void performAction(View view) {
        try {
           mContext.startActivityForResult(mIntent, mRequestCode);
        } catch (ActivityNotFoundException e) {
            Toast.makeText(mContext,
                    mContext.getText(R.string.actionbar_activity_not_found),
                    Toast.LENGTH_SHORT).show();
        }
    }
}

Вам понадобитсяпереопределить onActivityResult в своей деятельности, чтобы получить код результата, как описано здесь .

...