android.view.InflateException: двоичная строка XML-файла # 54: addView (View, LayoutParams) не поддерживается в ошибке AdapterView [дубликат]

Это старый вопрос, но это то, с чем я столкнулся; он перечисляет перечисление только один раз, но создает списки для каждого из разделов. Он не страдает от неожиданного поведения, когда ToArray() вызывается как некоторые из реализаций:

    public static IEnumerable<IEnumerable<T>> Partition<T>(IEnumerable<T> source, int chunkSize)
    {
        if (source == null)
        {
            throw new ArgumentNullException("source");
        }

        if (chunkSize < 1)
        {
            throw new ArgumentException("Invalid chunkSize: " + chunkSize);
        }

        using (IEnumerator<T> sourceEnumerator = source.GetEnumerator())
        {
            IList<T> currentChunk = new List<T>();
            while (sourceEnumerator.MoveNext())
            {
                currentChunk.Add(sourceEnumerator.Current);
                if (currentChunk.Count == chunkSize)
                {
                    yield return currentChunk;
                    currentChunk = new List<T>();
                }
            }

            if (currentChunk.Any())
            {
                yield return currentChunk;
            }
        }
    }
29
задан Luksprog 20 February 2013 в 13:42
поделиться

4 ответа

что мне делать ???

Исправить свой код.

UnsupportedOperationException: addView (View, LayoutParams) не поддерживается в AdapterView

Подкласс AdapterView, подобный ListView, не может иметь детей, добавленных вручную в файл макета или добавленных в код. Поэтому, если у вас есть это в одном из ваших макетов:

<ListView // .. other attributes>
     <// other views <-- notice the children of the ListView tag
</ListView>

этого не делать, так как это вызовет метод addView из ListView, выбрасывая исключение. Вместо этого используйте:

<ListView // .. other attributes />
< // other views

Вы также не можете использовать какие-либо из методов addView в ListView в коде следующим образом:

listViewReference.addView(anotherView); // <-- don't do it

Кроме того, если вы используете метод LayoutInflater.inflate в коде Activity или адаптера (его метод getView) не пропускают ListView в качестве второго параметра. Например, не используйте:

convertView  = inflator.inflate(R.layout.child_rows, parent);

, как в ответе Tamilarasi Sivaraj, так как это снова вызовет исключение. Вместо этого используйте:

convertView  = inflator.inflate(R.layout.child_rows, parent, false);

Что касается исключения, которое вы отправили в вопросе, похоже, вы используете метод setText с int (один из массивов s или i массив int). Проблема в том, что в этом случае TextView будет думать, что вы пытаетесь установить текст, используя строковый ресурс, подобный этому R.string.astring. Пропущенный вами int не является строковым ресурсом, поэтому будет выбрано исключение. Если s или i является int, и вы пытаетесь показать его в TextView, используйте это вместо:

tv.setText(String.valueOf(s[position])); // assuming s is the int array
103
ответ дан Luksprog 21 August 2018 в 11:51
поделиться
  • 1
    спасибо ... превосходный анализ !!! – elegance 20 February 2013 в 14:17
  • 2
    +1 для «Кроме того, если вы используете метод LayoutInflater.inflate в коде Activity или адаптера (его метод getView), не пропускайте ListView в качестве второго параметра & quot; – Mushtaq Jameel 6 August 2014 в 12:05
  • 3
    Похоже, это относится и к GridView. :( – Thom 5 November 2016 в 13:22

Если вы похожи на меня и полностью пропустили ответ, который мне нужен в ответ @ Luksprog, потому что он похоронен в нем, попробуйте добавить третий параметр к методу inflate, также упомянутый здесь здесь :

inflater.inflate(R.layout.group_row, parent, false);

Не используйте true вместо false или вы получите ту же самую ошибку, которая привела вас сюда, потому что она пытается прикрепить / добавить ее к родительскому объекту, следовательно addView is not supported in AdapterView.

3
ответ дан Community 21 August 2018 в 11:51
поделиться

Попробуйте следующее:

public static class ViewHolder {
    public ImageView imageView;
    public TextView textView; 

    public View getView(int position, View convertView, ViewGroup parent) {
        try{
            ViewHolder holder;

            if (convertView == null)  {
                holder = new ViewHolder(); 
                LayoutInflater inflater = context1.getLayoutInflater();
                convertView = inflater.inflate(R.layout.your_layout, null,true);  

                holder.imageView = (ImageView) convertView.findViewById(R.id.imgview);

                holder.textView = (TextView) convertView.findViewById(R.id.txtview);

                convertView.setTag(holder);  
            } else {
                holder = (ViewHolder) convertView.getTag();  
            }

            holder.textView.setText("your text");
            holder.imageView.setImageResource("your image resource");
        } catch (Exception e) {
            System.out.println("Error: "+e);    
        }

        return convertView;
    }
}
1
ответ дан Daniel Hernández Alcojor 21 August 2018 в 11:51
поделиться
  • 1
    Тамилараси Сиварадж, должен ли я поставить вид tex t и img на место просмотра ребенка ??? – elegance 20 February 2013 в 13:23
  • 2
    да, вы помещаете свое текстовое представление и изображение в дочерний вид и указываете имя макета в LayoutInflater ... если у вас есть какие-либо вопросы, спросите меня – Android_coder 20 February 2013 в 13:26
  • 3
    Tamilarasi Sivaraj, я не получаю u, когда u означает [groupPosition] [childPosition] ??? – elegance 20 February 2013 в 13:30
  • 4
    Я отредактировал мой код для размещения textview и imageview от макета до списка, используя адаптер, используя его ... – Android_coder 20 February 2013 в 13:41
  • 5
    Вы получили это? – Android_coder 20 February 2013 в 14:04

Замените макет в надувнике

 @Override
public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub

    if (convertView == null) {

        LayoutInflater inflater = (LayoutInflater) LayoutInflater
                .from(contex);
        convertView = inflater.inflate(R.layout.your_layout, parent, false);

    }

    txtName = (TextView) convertView.findViewById(R.id.txtName);
    txtName.setText(""+ContactsArr.get(position).get("ContName"));
    txtPhoneNumber = (TextView) convertView.findViewById(R.id.txtContact);
    txtPhoneNumber.setText(""+ContactsArr.get(position).get("ContPhone"));

    return convertView;
}
5
ответ дан Sanket Pandya 21 August 2018 в 11:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: