0

したがって、Activity 以外のクラスからインテントを呼び出すべきではないことはわかっています。結果を伴うインテントは言うまでもありません。非アクティビティ クラスは単にそれを行うべきではなく、本来行うべきことに対して責任を負うべきではありません。

私が持っているもの

これでNappingActivity、12 個のボタンを表示する が に実装されましたVideoButtonView。これらのボタンは伸びandroid.widget.Buttonます。

ボタンをドラッグしてクリックできるようにしたいので、次のようにVideoButtonView設定して、にドラッグ/クリックロジックを実装しました。

this.setOnTouchListener(new View.OnTouchListener() { … }

ユーザーが 内のボタンをクリックするonTouch(View v, MotionEvent event)と、以下が呼び出されます。

Context context = v.getContext();
Intent showVideo = new Intent(context, ViewActivity.class);
context.startActivity(showVideo);

ここまでは順調ですね。

私が欲しいもの

さて、このインテントは に戻りますがNappingActivity、結果を返すことで、この動画再生インテントを分離したいと思います。したがって、理想的には、ではなくstartActivityForResultからこれを呼び出します。後者はとにかく不可能だからです。NappingActivityVideoButtonView

質問

  • ボタンではなくアクティビティ内からクリックを処理できるように、または少なくともそこからインテントを送信できるように、これをリファクタリングするにはどうすればよいですか?

  • クリック アンド ドラッグ ロジック全体をアクティビティに移動する必要がありますか? あまりきれいに聞こえません。

  • ある種のカスタム リスナーを実装できますか?

4

1 に答える 1

1

ボタンではなくアクティビティ内からクリックを処理できるように、または少なくともそこからインテントを送信できるように、これをリファクタリングするにはどうすればよいですか?

コールバック システムを実装できます。3番目の回答を参照してください。

クリック アンド ドラッグ ロジック全体をアクティビティに移動する必要がありますか? あまりきれいに聞こえません。

いいえ、あなたはロジックを混ぜています(しかし、ドラッグシステムをどのように実装するか理解していないので、間違っているかもしれません).

ある種のカスタム リスナーを実装できますか?

インターフェイスを作成します。

public interface StartVideoListener {
    public void onStartVideoRequest(int buttonId); 
} 

NappingActivityこのインターフェースを実装してみましょう:

public class NappingActivity extends Activity implements StartVideoListener {

    // ...
    public void onStartVideoRequest(int buttonId) {
        // you know the button that was clicked, start the desired activity.
    }

クラスで、コンストラクターからフィールドに をVideoButtonViewキャストし、そのメソッドを で呼び出します。ContextStartVideoListeneronTouch

// ...
mListener.onStartVideoRequest(v.getId());
于 2012-11-14T11:18:26.510 に答える