馬上加入Android 台灣中文網,立即免費下載應用遊戲。
您需要 登錄 才可以下載或查看,沒有帳號?註冊
x
原本程式的結構如下,都是利用ListActivity作資料的呈現,欲呈現的階層為客戶清單、客戶購買商品清單、商品庫存清單。
未來可能會有多階層的需求,如此一來就必需撰寫更多的ListActivity,請問是否有合適的設計模式可以改善,
使程式結構在新增層級時不用再寫新的ListActivity, 達到重複利用的設計模式。
主程式部份
- public class MainActivity extends Activity {
-
- public static final String TAG = MainActivity.class.getSimpleName();
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
-
- //原本的資料是由web server取得,故用一簡單model class 來代替。
- String[] list = Data.getName();
-
- Bundle bundle = new Bundle();
- bundle.putStringArray("list", list);
-
- Intent intent = new Intent(MainActivity.this, ListActivityA.class);
- intent.putExtras(bundle);
-
- startActivity(intent);
- finish();
-
- }
複製代碼
第一層
接到MainActivity的資料後顯示客戶名稱清單
- public class ListActivityA extends ListActivity {
- public static final String KEY_LIST = "list";
-
- String[] list;
-
- String[] list2;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_listview);
-
- Bundle bundle = getIntent().getExtras();
- list = bundle.getStringArray(KEY_LIST);
-
- setListAdapter(new ArrayAdapter<String>(
- this,
- android.R.layout.simple_list_item_1,
- list));
- }
-
- @Override
- protected void onListItemClick(ListView listView, View view, int position, long id) {
- //當使用者按下清單項目後,根據項目內容取得下一個ListActivity清單
- list2 = Data.getHistory((String) listView.getItemAtPosition(position));
-
- Bundle bundle = new Bundle();
- bundle.putStringArray(KEY_LIST, list2);
-
- Intent intent = new Intent(ListActivityA.this, ListActivityB.class);
- intent.putExtras(bundle);
-
- startActivity(intent);
- }
-
- }
複製代碼
第二層
接到ListActivitA的資料後,顯示上一清單點選的客戶所買的商品清單。
- public class ListActivityB extends ListActivity {
- public static final String KEY_LIST = "list";
-
- String[] list;
-
- String[] list2;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_listview);
-
- Bundle bundle = getIntent().getExtras();
- list = bundle.getStringArray(KEY_LIST);
-
- setListAdapter(new ArrayAdapter<String>(
- this,
- android.R.layout.simple_list_item_1,
- list));
- }
-
- @Override
- protected void onListItemClick(ListView listView, View view, int position, long id) {
- //當使用者按下清單項目後,根據項目內容取得下一個ListActivity清單
- list2 = Data.getDetail((String) listView.getItemAtPosition(position));
-
- Bundle bundle = new Bundle();
- bundle.putStringArray(KEY_LIST, list2);
-
- Intent intent = new Intent(ListActivityB.this, ListActivityC.class);
- intent.putExtras(bundle);
-
- startActivity(intent);
- }
- }
複製代碼
第三層
接到ListActivityB的資料後,顯示上一個清單所點選的商品目前各倉的庫存量
- public class ListActivityC extends ListActivity {
- public static final String KEY_LIST = "list";
-
- String[] list;
-
- String[] list2;
-
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_listview);
-
- Bundle bundle = getIntent().getExtras();
- list = bundle.getStringArray(KEY_LIST);
-
- setListAdapter(new ArrayAdapter<String>(
- this,
- android.R.layout.simple_list_item_1,
- list));
- }
-
- @Override
- protected void onListItemClick(ListView listView, View view, int position, long id) {
- //因為我只有設定三階,所以這層並沒有取資料,未來在使用ListActivity時,不會一定是三階,會隨需求調整。
-
-
- }
- }
複製代碼
簡易model data
因為資料的取得是連線SERVER取得,所以以簡易資料來代替說明
- public class Data {
-
- public static String[] getName() {
- String[] data = {"Andy", "Jack", "John"};
- return data;
- }
-
- public static String[] getHistory(String name) {
- String[] data = new String[] {};
- switch (name) {
- case "Andy":
- data = new String[] {"Iphone6", "Sony Z", "Iphone6", "Iphone6"};
- break;
- case "Jack":
- data = new String[] {"Samsung S6", "Samsung S6", "Samsung S5", "Iphone6"};
- break;
- case "John":
- data = new String[] {"Iphone6", "Samsung S6", "Samsung S6", "Samsung S6"};
- break;
- }
-
- return data;
- }
-
- public static String[] getDetail(String item) {
- String[] data = new String[] {};
- switch (item) {
- case "Iphone6":
- data = new String[] {"wareHouseA 10", "wareHouseB 15", "wareHouseC 8"};
- break;
- case "Sony Z":
- data = new String[] {"wareHouseA 4", "wareHouseB 30"};
- break;
- case "Samsung S6":
- data = new String[] {"wareHouseA 10", "wareHouseB 5", "wareHouseC 6"};
- break;
- }
-
- return data;
- }
- }
複製代碼
|

|