2012-09-24 105 views
0

由於某些原因,當我查看我的列表時,我只能看到標題。我確信我使用的數組中有數據,因爲調試顯示它有。SeparatedListAdapter僅顯示標題

這是我的SeparatedListAdapter文件

public class SeparatedListAdapter extends BaseAdapter { 

public final Map<String,Adapter> sections = new LinkedHashMap<String,Adapter>(); 
public final ArrayAdapter<String> headers; 
public final static int TYPE_SECTION_HEADER = 0; 

public SeparatedListAdapter(Context context) { 
    headers = new ArrayAdapter<String>(context, R.layout.list_header); 
} 

public void addSection(String section, Adapter adapter) { 
    this.headers.add(section); 
    this.sections.put(section, adapter); 
} 

public Object getItem(int position) { 
    for(Object section : this.sections.keySet()) { 
     Adapter adapter = sections.get(section); 
     int size = adapter.getCount() + 1; 

     // check if position inside this section 
     if(position == 0) return section; 
     if(position < size) return adapter.getItem(position - 1); 

     // otherwise jump into next section 
     position -= size; 
    } 
    return null; 
} 

public int getCount() { 
    // total together all sections, plus one for each section header 
    int total = 0; 
    for(Adapter adapter : this.sections.values()) 
     total += adapter.getCount() + 1; 
    return total; 
} 

public int getViewTypeCount() { 
    // assume that headers count as one, then total all sections 
    int total = 1; 
    for(Adapter adapter : this.sections.values()) 
     total += adapter.getViewTypeCount(); 
    return total; 
} 

public int getItemViewType(int position) { 
    int type = 1; 
    for(Object section : this.sections.keySet()) { 
     Adapter adapter = sections.get(section); 
     int size = adapter.getCount() + 1; 

     // check if position inside this section 
     if(position == 0) return TYPE_SECTION_HEADER; 
     if(position < size) return type + adapter.getItemViewType(position - 1); 

     // otherwise jump into next section 
     position -= size; 
     type += adapter.getViewTypeCount(); 
    } 
    return -1; 
} 

public boolean areAllItemsSelectable() { 
    return false; 
} 

public boolean isEnabled(int position) { 
    return (getItemViewType(position) != TYPE_SECTION_HEADER); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    int sectionnum = 0; 
    for(Object section : this.sections.keySet()) { 
     Adapter adapter = sections.get(section); 
     int size = adapter.getCount() + 1; 

     // check if position inside this section 
     if(position == 0) 
      return headers.getView(sectionnum, convertView, parent); 
     if(position < size) 
      return adapter.getView(position - 1, convertView, parent); 

     // otherwise jump into next section 
     position -= size; 
     sectionnum++; 
    } 
    return null; 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

}

當我查看列表,它只是顯示了標題,別無其他。

編輯:好的,所以我理解了它,直到我可以自己回答我就必須張貼這樣的答案,現在

我想通了,我在做什麼。在我的片段中,我添加了該部分後清除了ArrayList,認爲這並不重要。顯然它確實很重要。

舊代碼

adapter.addSection(date, new ArrayAdapter<String>(getActivity(), R.layout.list_item, taskArray)); 
    taskArray.clear(); 

新代碼

adapter.addSection(date, new ArrayAdapter<String>(getActivity(), R.layout.list_item, new ArrayList<String>(taskArray))); 
    taskArray.clear(); 

添加new ArrayList<String>(taskArray)addSection電話解決了我的問題。

回答

0

我想通了我在做什麼。在我的片段中,我添加了該部分後清除了ArrayList,認爲這並不重要。顯然它確實很重要。

舊代碼

adapter.addSection(date, new ArrayAdapter<String>(getActivity(), R.layout.list_item, taskArray)); taskArray.clear();

新代碼

adapter.addSection(date, new ArrayAdapter<String>(getActivity(), R.layout.list_item, new ArrayList<String>(taskArray))); taskArray.clear();

添加新的ArrayList(taskArray)到Addsection的呼叫解決了我的問題。

相關問題