綁定帳號登入

Android 台灣中文網

打印 上一主題 下一主題

[求助] 多層ListActivity的設計模式

[複製連結] 查看: 1586|回覆: 2|好評: 0
跳轉到指定樓層
樓主
loginapk | 收聽TA | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
發表於 2015-6-11 12:22

馬上加入Android 台灣中文網,立即免費下載應用遊戲。

您需要 登錄 才可以下載或查看,沒有帳號?註冊

x
原本程式的結構如下,都是利用ListActivity作資料的呈現,欲呈現的階層為客戶清單、客戶購買商品清單、商品庫存清單。
未來可能會有多階層的需求,如此一來就必需撰寫更多的ListActivity,請問是否有合適的設計模式可以改善,
使程式結構在新增層級時不用再寫新的ListActivity, 達到重複利用的設計模式。

主程式部份
  1. public class MainActivity extends Activity {

  2.     public static final String TAG = MainActivity.class.getSimpleName();

  3.     @Override
  4.     protected void onCreate(Bundle savedInstanceState) {
  5.         super.onCreate(savedInstanceState);
  6.         setContentView(R.layout.activity_main);
  7.        
  8.         //原本的資料是由web server取得,故用一簡單model class  來代替。
  9.         String[] list = Data.getName();

  10.         Bundle bundle = new Bundle();
  11.         bundle.putStringArray("list", list);

  12.         Intent intent = new Intent(MainActivity.this, ListActivityA.class);
  13.         intent.putExtras(bundle);

  14.         startActivity(intent);
  15.         finish();

  16.     }
複製代碼


第一層
接到MainActivity的資料後顯示客戶名稱清單
  1. public class ListActivityA extends ListActivity {
  2.     public static final String KEY_LIST = "list";

  3.     String[] list;

  4.     String[] list2;

  5.     public void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         setContentView(R.layout.activity_listview);

  8.         Bundle bundle = getIntent().getExtras();
  9.         list = bundle.getStringArray(KEY_LIST);

  10.         setListAdapter(new ArrayAdapter<String>(
  11.                 this,
  12.                 android.R.layout.simple_list_item_1,
  13.                 list));
  14.     }

  15.     @Override
  16.     protected void onListItemClick(ListView listView, View view, int position, long id) {
  17.         //當使用者按下清單項目後,根據項目內容取得下一個ListActivity清單
  18.         list2 = Data.getHistory((String) listView.getItemAtPosition(position));

  19.         Bundle bundle = new Bundle();
  20.         bundle.putStringArray(KEY_LIST, list2);

  21.         Intent intent = new Intent(ListActivityA.this, ListActivityB.class);
  22.         intent.putExtras(bundle);

  23.         startActivity(intent);
  24.     }

  25. }
複製代碼


第二層
接到ListActivitA的資料後,顯示上一清單點選的客戶所買的商品清單。
  1. public class ListActivityB extends ListActivity {
  2.     public static final String KEY_LIST = "list";

  3.     String[] list;

  4.     String[] list2;

  5.     public void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         setContentView(R.layout.activity_listview);

  8.         Bundle bundle = getIntent().getExtras();
  9.         list = bundle.getStringArray(KEY_LIST);

  10.         setListAdapter(new ArrayAdapter<String>(
  11.                 this,
  12.                 android.R.layout.simple_list_item_1,
  13.                 list));
  14.     }

  15.     @Override
  16.     protected void onListItemClick(ListView listView, View view, int position, long id) {
  17.         //當使用者按下清單項目後,根據項目內容取得下一個ListActivity清單
  18.         list2 = Data.getDetail((String) listView.getItemAtPosition(position));

  19.         Bundle bundle = new Bundle();
  20.         bundle.putStringArray(KEY_LIST, list2);

  21.         Intent intent = new Intent(ListActivityB.this, ListActivityC.class);
  22.         intent.putExtras(bundle);

  23.         startActivity(intent);
  24.     }
  25. }
複製代碼


第三層
接到ListActivityB的資料後,顯示上一個清單所點選的商品目前各倉的庫存量
  1. public class ListActivityC extends ListActivity {
  2.     public static final String KEY_LIST = "list";

  3.     String[] list;

  4.     String[] list2;

  5.     public void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         setContentView(R.layout.activity_listview);

  8.         Bundle bundle = getIntent().getExtras();
  9.         list = bundle.getStringArray(KEY_LIST);

  10.         setListAdapter(new ArrayAdapter<String>(
  11.                 this,
  12.                 android.R.layout.simple_list_item_1,
  13.                 list));
  14.     }

  15.     @Override
  16.     protected void onListItemClick(ListView listView, View view, int position, long id) {
  17.         //因為我只有設定三階,所以這層並沒有取資料,未來在使用ListActivity時,不會一定是三階,會隨需求調整。
  18.         

  19.     }
  20. }
複製代碼


簡易model data
因為資料的取得是連線SERVER取得,所以以簡易資料來代替說明
  1. public class Data {

  2.     public static String[] getName() {
  3.         String[] data = {"Andy", "Jack", "John"};
  4.         return data;
  5.     }

  6.     public static String[] getHistory(String name) {
  7.         String[] data = new String[] {};
  8.         switch (name) {
  9.             case "Andy":
  10.                 data = new String[] {"Iphone6", "Sony Z", "Iphone6", "Iphone6"};
  11.                 break;
  12.             case "Jack":
  13.                 data = new String[] {"Samsung S6", "Samsung S6", "Samsung S5", "Iphone6"};
  14.                 break;
  15.             case "John":
  16.                 data = new String[] {"Iphone6", "Samsung S6", "Samsung S6", "Samsung S6"};
  17.                 break;
  18.         }

  19.         return data;
  20.     }

  21.     public static String[] getDetail(String item) {
  22.         String[] data = new String[] {};
  23.         switch (item) {
  24.             case "Iphone6":
  25.                 data = new String[] {"wareHouseA 10", "wareHouseB 15", "wareHouseC 8"};
  26.                 break;
  27.             case "Sony Z":
  28.                 data = new String[] {"wareHouseA 4", "wareHouseB 30"};
  29.                 break;
  30.             case "Samsung S6":
  31.                 data = new String[] {"wareHouseA 10", "wareHouseB 5", "wareHouseC 6"};
  32.                 break;
  33.         }

  34.         return data;
  35.     }
  36. }
複製代碼

「用Android 就來APK.TW」,快來加入粉絲吧!
Android 台灣中文網(APK.TW)
收藏收藏 分享分享 分享專題
用Android 就來Android 台灣中文網(https://apk.tw)
回覆

使用道具 舉報

沙發
gtoctr | 收聽TA | 只看該作者
發表於 2015-6-11 20:43
用ListView去setAdapter,
三個Array就三個Adapter,
每深一層就set不同的Adapter即可.
這樣只要一個Activity就搞定了.

是說你那個data model資料量一大就炸掉了吧......
有想過百萬筆以上的資料要如何處理嗎?
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

板凳
 樓主| loginapk | 收聽TA | 只看該作者
發表於 2015-6-12 11:58
gtoctr 發表於 2015-6-11 20:43
用ListView去setAdapter,
三個Array就三個Adapter,
每深一層就set不同的Adapter即可.

    感謝回覆,我要調整的方式就是只使用一個Activity去套用不同的list model,
請問可以在實作給予參考例子嗎,以上述demo來實作的話不知道如何著手。

    因為每一階層都有上下連結關系,例如點擊某一客戶名稱後取得該客戶購買清單
而不是一次就將所有ListActivity載入,而是依上一層提供數值動態載入下層清單。

    至於data model 的資料部份,是使用volley API來取得WEB資料,目前依系統運作下來
還算正常,百萬筆以上的資料量的確是可以加入測試來檢測系統的負荷量。
用Android 就來Android 台灣中文網(https://apk.tw)
回覆 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則