2015-06-27 65 views
9

我是新來的android,併爲小學兒童編寫學習應用程序。該應用程序是用於練習簡單的計算(加和減)。Android中可重複使用的拖放UI部件的代碼設計

到目前爲止,我已經完成了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 | 
|-----------------------------| 

在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 | 
|-----------------------------| 

或:

|-----------------------------| 
| 1 2 3 4 5   | 
| | | | | |   | 
| |+|  |+| |   | 
| |  |  |   | 
| |r1| |r2| |   | 
| |  |  |   | 
| \  \ /   | 
|  \  |-|    | 
|  \  |    | 
|  \  |r3|   | 
|  \ /   | 
|   \ /    | 
|   |+|    | 
|   |     | 
|   |r4|    | 
|        | 
|        | 
| 1 | 2 | 3 | 4 | 5 | 
| 6 | 7 | 8 | 9 | 0 | 
| cancel |  check | 
|-----------------------------| 

對於我目前的執行情況,我都拖&下降的東西,在一個活動和佈局是一個.xml文件。

我想以某種方式重複使用拖放功能的代碼來保持代碼清潔,並且不會在許多不同的活動中實現相同的功能。

我已經閱讀了關於android中的片段,並想到爲每個區域製作一個片段用於製作numblock和一個片段,但是就我所研究的片段而言,拖放片段並不是真的(drag and drop between two fragments,建議的解決方案似乎不是很優雅)。

現在,我正在考慮根據所需的模式在單個活動的onCreate()中動態創建除動態麻煩之外的所有內容。我希望你對這種方法發表意見。這樣做有可能出現問題嗎?

是否有另一種方法來實現相同的功能並保持代碼的可維護性? 你有什麼建議,我可以如何設計我的代碼儘可能簡單和可維護? 您將如何設計具有所需功能的應用程序?

回答

5

一般的建議,讓設計決定,直到你必須使他們肯定會適用於此。我確信有數百種方法可以組織這樣的代碼。

在活動(或者可能是一個片段)你到目前爲止有以下功能:

  • 拖放號
  • 計算,如果答案是正確的
  • 設置問題
  • 做所有活動必須做的事情 - 例如有一個onCreate()

你可以分裂出那些不同的功能嗎?

有沒有什麼東西可以成爲自己的類的好選擇?

  • 可拖拽的數字?
  • 不可拖動的數字?
  • 數學符號?
  • 你從哪裏拖到的地方?
  • 形成計算的行(可以互相嵌套)?

這些元素將如何相互溝通?

  • 要計算答案是否正確?
  • 因此,一個元素知道它在哪裏?

你打算如何創建一個活動的新實例?

  • 你會將哪些數據傳遞給活動?
  • 你想調用一個不同類型的集合嗎?
  • 如何確定活動加載的類型?

我還沒有開始回答你的問題,但這個答案變得很長。

最重要的問題是你想從設計中得到什麼?我猜測答案是儘可能簡單地嚮應用程序添加新類型的問題。

東西,可以幫助你:

  • 您可以通過編程添加視圖的佈局。你不需要在xml文件中指定東西。這可以簡單地用於從底部拖動或更復雜地生成新數字,以編程方式定義整個設置。
  • 我想接口和偵聽器將是元素溝通的最佳方式。
  • 查看一些模式可能很好:模板方法,靜態工廠方法或甚至策略在這裏可能會有所幫助。
  • 請記住,您可以輕鬆地將功能拆分爲單獨的Java文件,然後根據需要調用它們。
  • 這感覺很像遊戲。我認爲50/50是否值得花時間看看遊戲引擎是否可以幫助你。
  • 保持簡單 - 堅持一次拆分一件東西。一次上一堂課。我不會嘗試一下子做出一些龐大,複雜,複雜的設計。
+0

感謝您的時間和廣泛的答覆。這當然給了我一些關於如何着手的想法。 關於您的一些觀點: 是的,設計的重點在於讓其他人輕鬆理解並使他們能夠輕鬆地嚮應用程序添加新模式。一般來說,應用程序也應該一致使用,因此,將數字從麻將鎖中拖放到結果字段中的概念對於所有實施的模式都應該是相同的。 我想我會仔細看看聽衆......我可能會發現我正在尋找的東西...... – LPeteR90