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