android中可重复使用的拖放UI部件的代码设计

LPe*_*R90 9 user-interface android

我是android的新手,为小学的孩子们写了一个学习应用程序.该应用程序用于练习简单的计算(加法和减法).

到目前为止,我已经完成了UI设计并编写了一个简单的概念验证实现来演示应用程序的基本用法.

其中一项活动(添加123和456)的设计如下所示:

|-----------------------------|
|  |c| 1   |c| 2   |c| 3      |
|                             |
|      4       5       6      |
|    --------------------     |
|   | r1 |  | r2 |  | r3 |    |
|                             |
|                             |
|  1  |  2  |  3  |  4  |  5  |
|  6  |  7  |  8  |  9  |  0  |
|    cancel    |     check    |
|-----------------------------|
Run Code Online (Sandbox Code Playgroud)

numblock中的数字(0-9)是可以拖放到进位字段(|c|)或结果字段(|r1|等)的视图.已经丢弃到进位或结果字段的值也可以移动(再次通过拖放)移动到另一个进位或结果字段.

将有多种练习模式,例如:

|-----------------------------|
|   1   +   9   =   |r1|r2|   |
|   2   +   8   =   |r1|r2|   |
|   3   +   7   =   |r1|r2|   |
|   4   +   6   =   |r1|r2|   |
|   5   +   5   =   |r1|r2|   |
|                             |
|                             |
|  1  |  2  |  3  |  4  |  5  |
|  6  |  7  |  8  |  9  |  0  |
|    cancel    |     check    |
|-----------------------------|
Run Code Online (Sandbox Code Playgroud)

要么:

|-----------------------------|
|  1   2   3   4   5          |
|  |   |   |   |   |          |
|   |+|     |+|    |          |
|    |       |     |          |
|   |r1|    |r2|   |          |
|    |       |     |          |
|    \       \    /           |
|     \       |-|             |
|      \       |              |
|       \     |r3|            |
|        \     /              |
|         \   /               |
|          |+|                |
|           |                 |
|          |r4|               |
|                             |
|                             |
|  1  |  2  |  3  |  4  |  5  |
|  6  |  7  |  8  |  9  |  0  |
|    cancel    |     check    |
|-----------------------------|
Run Code Online (Sandbox Code Playgroud)

对于我目前的实现,我在一个活动中拥有所有拖放内容,并且布局是一个单独的.xml文件.

我想以某种方式重用代码来实现拖放功能,以保持代码清洁,并且在许多不同的活动中没有实现相同的功能.

我已经阅读过关于android中的片段,并考虑为numblock创建一个片段,并为每个丢弃数字的区域创建一个片段,但就我研究而言,片段之间的拖放并不是真正的方法(拖动并且在两个片段之间丢弃,建议的解决方案似乎不是很优雅).

现在,我正在考虑创建所有内容,但onCreate()根据所需的模式,动态地在单个活动中创建numblock .我希望你对这种方法有所了解.这样做时是否存在可能的问题?

是否有另一种方法来实现相同的功能并保持代码可维护?您有关于如何设计我的代码尽可能简单和可维护的建议吗?您将如何设计具有所需功能的应用程序?

TTr*_*mit 5

将设计决策留给你必须做出的一般建议肯定适用于此.我相信有数百种方法可以组织这样的代码.

在活动(或可能是片段)中,您到目前为止具有以下功能:

  • 拖放数字
  • 计算答案是否正确
  • 设置问题
  • 做所有活动必须做的事情 - 例如有一个onCreate()

你能以某种方式分解这些不同的功能吗?

是否有适合自己上课的好东西?

  • 可拖动的数字?
  • 不可拖动的数字?
  • 数学符号?
  • 你拖拽的地方?
  • 形成计算的行(可以嵌套在一起)?

这些元素将如何相互通信?

  • 要计算答案是否正确?
  • 这样一个元素知道它在哪里?

您打算如何创建活动的新实例?

  • 您将哪些数据传递给活动?
  • 您想要拨打一组不同类型的电话吗?
  • 如何确定Activity加载的类型?

我甚至没有开始回答你的问题,但这个答案已经很长了.

最重要的问题是你想从设计中得到什么?我猜测答案是尽可能简单地向应用程序添加新类型的问题.

可能对您有所帮助的事情:

  • 您可以以编程方式将视图添加到布局中.您不需要在xml文件中指定内容.当您从底部拖动或更复杂地以编程方式定义整个设置时,这可以简单地用于生成新数字.
  • 我想接口和监听器将是元素进行通信的最佳方式.
  • 看一些模式可能会很好:模板方法,静态工厂方法甚至策略在这里可能会有所帮助.
  • 请记住,您可以轻松地将功能从活动拆分为单独的Java文件,然后根据需要调用它们.
  • 感觉很像游戏.我认为是否值得花时间研究游戏引擎是否可以帮助你,这是50/50.
  • 保持简单 - 坚持一次拆分一件事.一次只上一节课.我不会尝试同时制作一些庞大,复杂,复杂的设计.