Я относительно новичок в Android, особенно в отношении создания больших проектов. Я обычно добавляю к MainActivity, но он становится очень громоздким очень быстро, и я хотел бы лучше реорганизовать/упорядочить код.Организация MainActivity в классы
Предположим, у меня есть MainActivity выполнения SomeAction действия(), инициированного ввода данных пользователем с помощью жестов и кнопки кликов:
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();
}
}
Как я могу разделить это на различные классы/файлы, хранить файлы меньше? Я хотел бы в конечном итоге с чем-то вроде этого:
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, чтобы сделать эту работу?
Вам не нужно расширять все классы с помощью MainActivity. –
Причина, по которой я сделал это, так, например, класс MyGestureDetection может использовать метод someAction(). – BBB
Вы можете сделать это, отправив параметр Activity as в свой конструктор MyGestureDetection, например 'public MyGestureDetection (Activity activity) {this.activity = new WeakReference <> (activity) .get()}'. Затем измените 'someAction()' на метод, который вы используете в MainActivity. –