Итак ... У меня есть фрагмент, содержащий ListView.Strange ... ListView показывает только часть данных
У меня также есть private ArrayList<ComicListItem> listViewData;
Это определено внутри класса фрагментов. В этом списке я храню данные, чтобы отобразить их с помощью ListView.
У меня есть public class ListViewOfComicsAdapter extends ArrayAdapter<ComicListItem>
тоже.
я заполнить listViewData с данными внутри
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
и данные там, я видел, с помощью отладчика.
Следующая вещь, которую я делаю:
@Override
public void onResume()
{
super.onResume();
ArrayList<ComicListItem> itemArrayList = new ArrayList<>();
if(listViewData != null)
{
for (ComicListItem cli : listViewData)
itemArrayList.add(cli);
}
// I added this one for test, and it is the only one that is shown inside ListView
itemArrayList.add(new ComicListItem(true, "aaaa", null, "eeee"));
listView = (ListView)getActivity().findViewById(R.id.list_view_comics);
adapter = new ListViewOfComicsAdapter(getContext(), R.id.list_view_comics, itemArrayList);
// adapter.notifyDataSetChanged(); // no change, really
listView.setAdapter(adapter);
}
я копирую значения по одному в других ArrayList<ComicListItem>
. Зачем? Поскольку у меня была такая же проблема ранее при передаче listViewData
, что я заполнил конструктор ListViewOfComicsAdapter
, поэтому я просто скопировал данные в itemArrayList
вот так, и это сработало на короткое время (данные были видны).
Теперь только видимый элемент - это тот, который я добавил вручную (для целей тестирования). В отладчике я вижу 31 элемент в itemArrayList
, и они не равны нулю.
Все данные, которые я добавляю в listViewData
, есть, но не отображаются внутри ListView.
getView(int position, View convertView, ViewGroup parent)
от адаптера называется только один раз.
У меня есть list_view_item.xml
и элемент списка, который появляется, использует его.
Я испытываю боль, кто-то, пожалуйста, помогите.
ОБНОВЛЕНИЕ - код адаптера
public class ListViewOfComicsAdapter extends ArrayAdapter<ComicListItem>
{
Context mContext;
ComicListItem data[] = null;
public ListViewOfComicsAdapter(Context context, int resource, ArrayList<ComicListItem> items)
{
super(context, resource, items);
mContext = context;
try
{
data = new ComicListItem[items.size()];
for (int i = 0; i < items.size(); i++)
data[i] = items.get(i);
}
catch (Exception e)
{
Log.e("problem", "no items to display in framgent");
}
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
boolean recycleView = true;
if(convertView == null)
{
// inflate the layout
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater();
convertView = inflater.inflate(R.layout.list_item_comic, parent, false);
recycleView = false;
}
// object item based on the position
ComicListItem objectItem = data[position];
ComicStorageInfo info = new ComicStorageInfo(null, 0, position + 1, 1, objectItem.fileName);
TextView textViewItem = (TextView) convertView.findViewById(R.id.list_item_comic);
textViewItem.setText(objectItem.date);
if(!recycleView)
{
Drawable drawable = new BitmapDrawable(getContext().getResources(), App.getInstance().readImageFromInternalStorage(info.getFileName()));
textViewItem.setCompoundDrawablesWithIntrinsicBounds(null, drawable, null, null);
}
else
{
ProgressBar progressBar = (ProgressBar)convertView.findViewById(R.id.comic_progressbar);
new ReadImageFromStorage(textViewItem, progressBar).execute(info.getFileName());
}
return convertView;
}
}
Вы можете разместить код адаптера? – pgiitu
У меня есть обновленный вопрос с кодом адаптера. – user2534306