2015-05-09 3 views
-1
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; 
    } 
    @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); 

Вот ExceptionПочему я получаю UnsupportedOperationException в android?

 if(position < size) return adapter.getView(position - 1, convertView, parent);     
     // otherwise jump into next section 
     position -= size; 
     sectionnum++; 
    } 
    return null; 
} 

Я не понимаю, почему я получаю это исключение в этой линии ... Пожалуйста, помогите мне ~ Я слышал, эта проблема вызывает по списку < > но, я не мог найти, что не так в моем кодировании

+0

отправьте свой логарифм, пожалуйста –

ответ

0

Где вы назначаете значение headers? Скорее всего, это то, что это ArrayAdapter, поддерживаемый только для чтения ArrayList.

Это может произойти, например, при запуске

this.headers = new ArrayAdapter(context, resource, Arrays.asList(T... array)) 

который возвращает настраиваемый Array.ArrayList, который только для чтения. См. here for asList documentation:

Возвращает список фиксированного размера, поддерживаемый указанным массивом.

Это значит, что вы не можете запустить метод .add() в списке. Для решения см. Это related StackOverflow question.

Смежные вопросы