我正在使用android-actionbar (https://github.com/johannilsson/android-actionbar)在我的应用程序中创建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版本。有什么解决方案吗?
发布于 2011-06-28 01:58:14
编辑:我目前推荐使用ActionBarSherlock而不是android-actionbar。它允许在新设备上使用原生Android操作栏,并在旧设备上提供完全的API兼容性。
原始答案:
我推荐mimic-native-api分支,它更新,并且有一些非常有用的特性,比如能够从XML定义操作。(我在一个大型项目中使用它,它工作得很好。)
但是,您应该能够通过创建自己的AbstractAction实现在主分支中执行此操作--例如,添加另一个类似于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所示。
https://stackoverflow.com/questions/6490580
复制相似问题