我有一个按钮监听器,当用户单击按钮时我想启动相机意图。
目前我有这个:
public class ButtonListener implements View.OnClickListener
{
private ArrayList<String> connectedItems;
private String identifier = null;
private Context context;
private EnteredValues enteredValues;
public ButtonListener(Context c, String identifier, ArrayList<String> connectedItems) {
this.connectedItems = connectedItems;
this.identifier = identifier;
this.context = c;
}
public void onClick(View v) {
if (identifier.equals(ButtonItem.takePhoto)) {
MainActivity.takePhoto();
}
}
现在我想在 mainActivity 中调用一个方法,并在那里启动 startActivityForResult,但出现错误,无法从静态方法调用 startActivityForResult。
public class mainActivity extends Activity{
...
public static void takePhoto(){
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE));
break;
//Here I get the error..
}
}
解决此类问题的最佳实践是什么?将 mainActivity 对象传递给我的 buttonListener 还是还有其他选项?
非常感谢:)
不要使用应用程序上下文 - 因为它会破坏您的 ActivityStack。
我建议向此静态方法添加 Activity 参数:
public static void takePhoto(Activity activity, int requestCode){
activity.startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), requestCode);
}
不仅仅是从侦听器传递 Activity。您必须将 Activity 实例传递给它,而不是简单的 Context,因为只有 Activity 可以startActivityForResult()
calls.
所以clickListener代码将更改如下:
公共类 ButtonListener 实现 View.OnClickListener
{
私有 ArrayList 连接项;
私有字符串标识符= null;
私人活动活动;
私有 EnteredValues 输入值;
public ButtonListener(Activity activity, String identifier, ArrayList<String> connectedItems) {
this.connectedItems = connectedItems;
this.identifier = identifier;
this.activity = activity;
}
public void onClick(View v) {
if (identifier.equals(ButtonItem.takePhoto)) {
MainActivity.takePhoto(activity, 100);
}
}
制作此类静态帮助器是一个很好的做法,以避免从代码的不同部分创建意图和 startActivities。
祝你好运。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)