2016-10-25 11 views
0

私は比較的大規模なプロジェクトの作成に関して、Androidには比較的新しいです。私はMainActivityに追加する傾向がありますが、非常に迅速に扱いにくくなり、コードをリファクタリング/整理したいと考えています。MainActivityをクラスに編成する

public class MainActivity extends AppCompatActivity implements 
    GestureDetector.OnGestureListener, 
    GestureDetector.OnDoubleTapListener { 

    public void someAction() { 
    } 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mDetector = new GestureDetectorCompat(this, this); 
     mDetector.setOnDoubleTapListener(this); 
    } 

    ... 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     someAction(); 
    } 

    ... 

    public void buttonClick(View view) { 
     // called from res/layout: <Button android:onClick="buttonClick" ... /> 
     someAction(); 
    } 

} 

私は小さなファイルを維持するために、異なるクラス/ファイルにこれを分割することができます方法:

は、私はジェスチャーやボタンのクリックを介してユーザ入力によって開始されたアクションsomeActionを実行MainActivityを()があると?

MainActivity.java:

public class MainActivity extends AppCompatActivity { 
    public void someAction() { 
    } 
} 

MyGestureDetection.java:

public class MyGestureDetection extends MainActivity implements 
    GestureDetector.OnGestureListener, 
    GestureDetector.OnDoubleTapListener { 

    private GestureDetectorCompat mDetector; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mDetector = new GestureDetectorCompat(this, this); 
     mDetector.setOnDoubleTapListener(this); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     someAction(); 
    } 

MyButtonHandler.java:

public class MyButtonHandler extends MainActivity { 
    public void buttonClick(View view) { 
     // called from res/layout: <Button android:onClick="buttonClick" ... /> 
     someAction(); 
    } 
} 

質問私はこのようなもので終わるしたいと思います1(一般):正しいアプローチは何ですか?

質問2(具体的):私は上記のようにコードを分割することができました。 MyGestureDetectionクラスはsomeAction()メソッドを見ることができます。しかし、MyGestureDetectionはインスタンス化されていないようです。この作業を行うためにMainActivityで何をする必要がありますか? MVPで例えば神のオブジェクトのような活動を処理しないように

+0

すべてのクラスをMainActivityで拡張する必要はありません。 –

+0

私がそれをした理由はそうです。 MyGestureDetectionクラスはsomeAction()メソッドを使用できます。 – BBB

+0

あなたは 'MyGestureDetection'コンストラクタのActivity asパラメータを' public MyGestureDetection(Activity activity){this.activity = new WeakReference <>(activity).get()} 'のように送信することでそれを行うことができます。次に、 'someAction()'をMainActivityで使うメソッドに変更します。 –

答えて

1

、1はクリーンなアーキテクチャ(MVP、VIPER、MVVM等。)のいずれかを使用する必要があります...

は、(モデルの略 - ビュー - プレゼンター)Viewレイヤーは、アクティビティ(またはフラグメント)であり、アクティビティをライフサイクルコンテナと同じように使用するため、スクリーンをレンダリングし、すべてのユーザー対話をPresenterに伝播します。Presenterはビジネスロジックを行い、Modelレイヤーに連絡して情報を取得しますデータ...

クリーンなアーキテクチャを開始するために、より有用な情報とチュートリアルがあります。たとえば、here

+0

OK、そうですね。リンクも見ていれば理想的です。しかし、私は自分のJavaの知識はあまりにも基本的だと思う。あなたは超簡単な例を知っていますか?詳細を記した別のチュートリアルもありますか? – BBB

関連する問題