4

ボタンリスナーがあり、ユーザーがボタンをクリックすると、カメラの意図を開始したいと考えています。現時点で私はこれを持っています:

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 に渡しますか、それとも他のオプションがありますか?

多くのthx :)

4

5 に答える 5

1

this(または)を使用して、MainActivity をコンテキストとして静的メソッドに渡し、MainActivity.thisそれを にキャストできActivityます。これにより、ActivityStack が壊れることはありません。

あなたの場合、 MainActivity で次のようにクリックリスナーを作成します。

new ButtonListener(this, "abc", null)
new ButtonListener(MainActivity.this, "abc", null) // in a nested class or constructor

次に、ButtonListener でコンテキストを渡します。

MainActivity.takePhoto(context);

そして最後に MainActivity で:

public static void takePhoto(Context context){
   ((Activity)context).startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), 123);
}
于 2018-11-18T20:59:09.423 に答える