我对Android比较陌生,特别是在创建大型项目方面。我倾向于只是添加到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 :(得分:1)
要不像上帝对象那样对待活动,应该使用其中一个干净的架构(MVP,VIPER,MVVM等......)......
例如,在MVP(代表模型 - 视图 - 演示者)中,您的View层将是一个活动(或片段,因此您将Activity用作生命周期容器),它将呈现屏幕并将所有用户交互传播到Presenter然后,Presenter将执行您的业务逻辑并联系Model层以检索信息和数据......
您可以找到更多有用的信息和教程,以帮助您开始使用干净的体系结构。例如here