从静态方法调用startActivityForResult

Rob*_*met 3 android

我有一个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.

祝好运.