2015-05-29 143 views
0

我正在爲平行的iOS和Android編寫應用程序,而且我正面臨一個小問題。在Android中顯示內部代表的設置列表視圖

我顯示的設置給用戶的列表和設置數據在用於部分設置內部表示,如下所示:

Section 
    Section object 
    Section object 
Section 
    Section object 

在iOS中,當用戶點擊一設置對象,或者當系統想要爲其繪製視圖時,它會調用具有NSIndexPath對象的方法。例如:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

並自動處理這些部分。

在Android中,列表視圖被「扁平化」,缺乏更好的術語。這樣的方法只有一個行標名爲:

public Object getItem(int position); 

現在,它實際上是解決試圖represet部分直接在適配器(MySettingsAdapter extends BaseAdapter)一個相當困難的問題。

現在這個問題是通過展平整個底層數據結構來解決的,但是它幾乎沒有任何重複的代碼。該解決方案更好的我能想到的是像做以下我MySettingsAdapter

class MySettingsAdapter extends BaseAdapter { 
    MyInternalDataStructure settingsData; 
    int sections; 
    int rowsForSection[sections]; 

    public MySettingsAdapter (MyInternalDataStructure settingsData) { 
     this.settingsData = settingsData; 
     this.sections = settingsData.sections; 
     for (int i = 0; i < sections; i++) { 
      rowsForSection[i] = settingsData.settingsInSection[i].size(); 
     } 
    } 

    @Override 
    public Object getItem(int position) { 
     int sectionFromPostion; 
     int rowFromPosition; 
     // Calculate section and row here... 
     return settingsData.getSetting(sectionFromPostion, rowFromPosition); 
    } 
} 

我只是不能計算爲sectionFromPostionrowFromPostion右...

回答

1

不幸的是Android不您可以通過UITableView獲得與部分相同的能力。不過Android確實提供了一個解決方案,即ExpandableListView。雖然類似於ListView,但它的工作原理有所不同,並與不同類型的適配器進行交互。

Android提供了SimpleExpandableListAdapter,您可以使用ExpandableListView。我現在會警告你。它笨重而且相當有限。此外,它還要求您將數據整理到MapsList,這本身可能是一件痛苦的事情。

或者,您可以通過執行BaseExpandableListAdapterExpandableListView創建自己的適配器。這與實施BaseAdapter非常相似。它只是有一些額外的鐘聲和哨聲來支持像結構這樣的層。

基本上所有這些Expandable...[foo]類引入具有一組(部分)和兒童(下一個部分的數據)的想法。您的適配器中的數據不是index,而是groupPositionchildPosition。與此同時,ExpandableListView也有這樣一種朦朧的中間立場理念,因爲它適用於團體/小孩的職位,打包的職位和平坦的職位。

作爲一個側面說明。根據數據的組織方式,我建議查看在3rd party library中找到的Rolodex適配器。他們的目的是使ExpandableListViews更容易工作,並有大量的代碼示例和演示應用程序來幫助你走。

相關問題