私は比較的大規模なプロジェクトの作成に関して、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で例えば神のオブジェクトのような活動を処理しないように
すべてのクラスをMainActivityで拡張する必要はありません。 –
私がそれをした理由はそうです。 MyGestureDetectionクラスはsomeAction()メソッドを使用できます。 – BBB
あなたは 'MyGestureDetection'コンストラクタのActivity asパラメータを' public MyGestureDetection(Activity activity){this.activity = new WeakReference <>(activity).get()} 'のように送信することでそれを行うことができます。次に、 'someAction()'をMainActivityで使うメソッドに変更します。 –