如何使用android-actionBar startActivityForResult?

时间:2011-06-27 08:58:45

标签: android android-intent android-actionbar

我正在使用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版本。 任何解决方案?

1 个答案:

答案 0 :(得分:3)

修改:我目前建议使用ActionBarSherlock代替android-actionbar。它允许在较新的设备上使用原生Android操作栏,并在较旧的设备上提供完全的API兼容性。


原始答案:

我建议使用mimic-native-api分支,它更新,并且具有一些非常有用的功能,例如能够从XML定义动作。 (我在一个大型项目中使用它并且它的工作非常出色。)

但是,您应该可以通过创建自己的AbstractAction实现在master分支中执行此操作 - 例如添加另一个类似于IntentAction的类,名为“ResultAction”,并使用mContext.startActivityForResult(mIntent)代替mContext.startActivity(mIntent)。您还需要在onActivityResult中存储要监视的requestCode。

一些完全未经测试的示例代码:

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以获取结果代码,如文档here所述。