2

我正在使用 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 分支似乎很容易,但我宁愿不更改我的actionBar 版本。有什么解决办法吗?

4

1 回答 1

3

编辑:我目前推荐使用ActionBarSherlock而不是 android-actionbar。它允许在较新的设备上使用原生 Android 操作栏,并在较旧的设备上提供完整的 API 兼容性。


原答案:

我会推荐mimic-native-api 分支,它是最新的并且具有一些非常有用的特性,例如能够从XML 定义动作。(我在一个大型项目中使用它,它工作得很好。)

但是,您应该能够通过创建自己的 AbstractAction 实现在主分支中执行此操作 - 例如添加另一个类似于 IntentAction 的类,称为“ResultAction”,并让它使用 mContext.startActivityForResult(mIntent) 而不是 mContext.startActivity(mIntent )。您还需要将要监视的 requestCode 存储在 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 以获取结果代码,如此所述。

于 2011-06-27T17:58:14.480 回答