Android 台灣中文網
標題:
多層ListActivity的設計模式
[打印本頁]
作者:
loginapk
時間:
2015-6-11 12:22
標題:
多層ListActivity的設計模式
原本程式的結構如下,都是利用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;
}
}
複製代碼
作者:
gtoctr
時間:
2015-6-11 20:43
用ListView去setAdapter,
三個Array就三個Adapter,
每深一層就set不同的Adapter即可.
這樣只要一個Activity就搞定了.
是說你那個data model資料量一大就炸掉了吧......
有想過百萬筆以上的資料要如何處理嗎?
作者:
loginapk
時間:
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 台灣中文網 (https://apk.tw/)
Powered by Discuz! X3.1