リストビューで 10 項目ごとに読み込みたいのですが、リストビューで項目を再利用したくありません。
1.10個のアイテムをロードし、アダプターをリストビューに設定し、アダプタークラスでメソッド getViewTypeCount() を次のように呼び出します。(現在の itemList は 10 です)
public int getViewTypeCount() {
return itemList.size();
}
2. getViewTypeCount() でデバッグすると、値 10 が返されます。
3.次に、新しい10個のアイテムをitemListに追加し(itemListの現在のアイテムは20個)、adapter.notifyDataSetChanged()を呼び出します
4.リストビューを下にスクロールすると機能しますが、上にスクロールするとエラーになります(残念ながら)
5. getViewTypeCount() が adapter.notifyDataSetChanged() の後に起動しないため、20 が返されないため、問題が見つかりました (getViewTypeCount() で 500 を返すことをテストしているため、エラーではなく動作していることがわかります)。
6. リスト ビューを 10 アイテムごとにロードしたいのですが、リストビューの再利用位置は望ましくありません。それを解決する方法は?.
編集
これは私のアダプタークラスです
public class ContentListAdapter extends BaseAdapter {
private Context context;
private ArrayList<ContentInfo> Content;
private LayoutInflater Layf;
public ContentListAdapter(Context context, ArrayList<ContentInfo> content){
this.context = context;
this.Content = content;
this.Layf = LayoutInflater.from(context);
}
@Override
public int getCount() {
return Content.size();
}
@Override
public Object getItem(int position) {
return Content.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
@Override
public int getViewTypeCount() {
return Content.size();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = Layf.inflate(R.layout.content_list_item, null);
}
ImageView img_ContentImage = (ImageView) convertView.findViewById(R.id.img_ContentImage);
TextView tv_ContentName = (TextView) convertView.findViewById(R.id.tv_ContentName);
TextView tv_ContentDate = (TextView) convertView.findViewById(R.id.tv_ContentDate);
TextView tv_ContentViews = (TextView) convertView.findViewById(R.id.tv_ContentViews);
if(img_ContentImage != null){
if(Content.get(position).getPicture().length() > 0)
new DownloadImageViewTask(img_ContentImage).execute(Content.get(position).getPicture());
}
if(tv_ContentName != null)
tv_ContentName.setText(Content.get(position).getTitle().replace(" "," ").replace("-", "–"));
if(tv_ContentDate != null) {
if(Content.get(position).getPublishDate().length() > 0) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date dt = sdf.parse(Content.get(position).getPublishDate());
String year = new SimpleDateFormat("yyyy", new Locale("th", "TH")).format(dt);
String byear = (Integer.parseInt(year) + 543) + "";
tv_ContentDate.setText((new SimpleDateFormat("d MMM yyyy", new Locale("th", "TH")).format(dt)).replace(year, byear));
}catch (Exception e){
}
}
}
if(tv_ContentViews != null){
DecimalFormat formatter = new DecimalFormat("#,##0");
tv_ContentViews.setText(formatter.format(Content.get(position).getViews()));
}
return convertView;
}
}