Это старый вопрос, но это то, с чем я столкнулся; он перечисляет перечисление только один раз, но создает списки для каждого из разделов. Он не страдает от неожиданного поведения, когда 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;
}
}
}
что мне делать ???
blockquote>Исправить свой код.
UnsupportedOperationException: addView (View, LayoutParams) не поддерживается в AdapterView
blockquote>Подкласс
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
Если вы похожи на меня и полностью пропустили ответ, который мне нужен в ответ @ Luksprog, потому что он похоронен в нем, попробуйте добавить третий параметр к методу inflate
, также упомянутый здесь здесь :
inflater.inflate(R.layout.group_row, parent, false);
Не используйте true
вместо false
или вы получите ту же самую ошибку, которая привела вас сюда, потому что она пытается прикрепить / добавить ее к родительскому объекту, следовательно addView is not supported in AdapterView
.
Попробуйте следующее:
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;
}
}
Замените макет в надувнике
@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;
}