2016-10-25 3 views
0

Я относительно новичок в 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, чтобы сделать эту работу?

+0

Вам не нужно расширять все классы с помощью MainActivity. –

+0

Причина, по которой я сделал это, так, например, класс MyGestureDetection может использовать метод someAction(). – BBB

+0

Вы можете сделать это, отправив параметр Activity as в свой конструктор MyGestureDetection, например 'public MyGestureDetection (Activity activity) {this.activity = new WeakReference <> (activity) .get()}'. Затем измените 'someAction()' на метод, который вы используете в MainActivity. –

ответ

1

Чтобы не относиться к деятельности как объекты Бога, следует использовать один из чистых архитектур (MVP, VIPER, MVVM и т.д ..) ...

Например, в MVP (означает Model - View - Presenter) ваш слой будет представлять собой активность (или фрагмент, поэтому вы используете Activity как контейнер жизненного цикла), который отображает экран и распространяет все взаимодействия с пользователем на Presenter. Затем Presenter выполнит вашу бизнес-логику и свяжется с уровнем модели для получения информации и данные ...

Вы можете найти более полезную информацию и учебные пособия, чтобы начать работу с чистыми архитектурами. Например here

+0

Хорошо, да, это звучит хорошо. Посмотрел также на ссылку, и я получу идеальный вариант. Тем не менее, я думаю, что мои знания в Java слишком сложны. Вы знаете о суперпростом примере? Или другой учебник, в котором излагаются детали? – BBB

Смежные вопросы