我有一个buttonlistener,当用户点击按钮时,我想启动一个相机意图.目前我有这个:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想在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..
}
Run Code Online (Sandbox Code Playgroud)
}
解决此类问题的最佳做法是什么?将mainActivity对象传递给我的buttonListener还是有其他选项?
很多thx :)
Ale*_*exN 12
不要使用Application上下文 - 因为它会破坏您的ActivityStack.我建议将Activity参数添加到此静态方法:
public static void takePhoto(Activity activity, int requestCode){
activity.startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), requestCode);
}
Run Code Online (Sandbox Code Playgroud)
而不仅仅是从你的听众传递活动.您必须将Activity实例传递给它,而不是简单的Context,因为只有Activity可以进行startActivityForResult()调用.
所以clickListener代码将改变如下:public class ButtonListener实现View.OnClickListener {private ArrayList connectedItems; private String identifier = 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个很好的做法,可以使这些静态助手避免从代码的不同部分创建意图和startActivities.
祝好运.
| 归档时间: |
|
| 查看次数: |
7469 次 |
| 最近记录: |