ниже мой код адаптера и журналы (тег журнала «jieke»), проблема в том, что он не может отображать целые элементы в списке, например, отображать только 8 элементов в списке тем размер 10! см. В журнале: getCount возвращает 10, getView также называется 10 раз, но я все еще видел только 8 просмотров, почему?Почему мой адаптер не может обновить его вид
public class NumberAdapter extends BaseAdapter{
private LayoutInflater mInflater;
private ArrayList<NumberModel> mPhoneNumberList;
public NumberAdapter(Context context, ArrayList<NumberModel> phoneNumberList){
mInflater = LayoutInflater.from(context);
mPhoneNumberList = phoneNumberList;
}
@Override
public int getCount() {
if (mPhoneNumberList != null) {
LogUtils.d("jieke", "count="+mPhoneNumberList.size());
return mPhoneNumberList.size();
}
return 0;
}
@Override
public Object getItem(int position) {
if (position > -1 && mPhoneNumberList != null && position < mPhoneNumberList.size()) {
return mPhoneNumberList.get(position);
}
return null;
}
public void setPhoneNumberList(ArrayList<NumberModel> phoneNumberList){
mPhoneNumberList = phoneNumberList;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LogUtils.d("jieke", "get view on position= " +position);
ItemViewTag viewTag;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.grid_item_custom_number, null);
viewTag = new ItemViewTag((ImageView) convertView.findViewById(R.id.item_image)
,(ImageView) convertView.findViewById(R.id.item_phone)
, (TextView) convertView.findViewById(R.id.item_text));
convertView.setTag(viewTag);
} else {
viewTag = (ItemViewTag) convertView.getTag();
}
return convertView;
}
class ItemViewTag {
protected ImageView mIcon;
protected ImageView mPhone;
protected TextView mName;
public ItemViewTag(ImageView icon, ImageView phone, TextView name){
this.mName = name;
this.mIcon = icon;
this.mPhone = phone;
}
}
}
Вот Log:
05-13 21:20:24.975 D/absec.:CustomServiceNumberTabItemView(18651): reset adaptor this=1
05-13 21:20:24.975 D/absec.:jieke(18651): count=10
05-13 21:20:24.975 D/absec.:jieke(18651): count=10
05-13 21:20:24.975 D/absec.:CustomServiceNumberTabItemView(18651): notify change this=1
05-13 21:20:24.975 D/absec.:jieke(18651): count=10
05-13 21:20:24.975 D/absec.:jieke(18651): count=10
05-13 21:20:24.975 I/absec.:QBaseTabView(18651): onResume
05-13 21:20:24.985 D/absec.:jieke(18651): count=10
05-13 21:20:24.985 D/absec.:jieke(18651): get view on position= 0
05-13 21:20:24.985 D/absec.:jieke(18651): count=10
05-13 21:20:24.985 D/absec.:jieke(18651): get view on position= 0
05-13 21:20:24.985 D/absec.:jieke(18651): count=10
05-13 21:20:24.985 D/absec.:jieke(18651): get view on position= 0
05-13 21:20:24.985 D/absec.:jieke(18651): count=10
05-13 21:20:24.985 D/absec.:jieke(18651): get view on position= 0
05-13 21:20:25.005 D/absec.:jieke(18651): get view on position= 0
05-13 21:20:25.015 D/absec.:jieke(18651): get view on position= 1
05-13 21:20:25.015 D/absec.:jieke(18651): get view on position= 2
05-13 21:20:25.015 D/absec.:jieke(18651): get view on position= 3
05-13 21:20:25.015 D/absec.:jieke(18651): get view on position= 4
05-13 21:20:25.035 D/absec.:jieke(18651): get view on position= 5
05-13 21:20:25.035 D/absec.:jieke(18651): get view on position= 6
05-13 21:20:25.035 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.045 D/absec.:jieke(18651): get view on position= 7
05-13 21:20:25.045 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.055 D/absec.:jieke(18651): get view on position= 8
05-13 21:20:25.055 D/absec.:jieke(18651): get view on position= 9
05-13 21:20:25.065 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.075 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.085 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.095 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.105 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.115 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.125 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.135 D/absec.:CustomServiceActivity(18651): values=is_common=1
05-13 21:20:25.265 D/absec.:CustomServiceNumberAddActivity(18651): AddActivity destroy
на самом деле, мне просто нужно обновить GridView после mPhoneNumberList изменения (после некоторого mPhoneNumberList.add() или mPhoneNumberList.remove()), но я найденный с помощью NumberAdapter.notifyDataSetChanged() не работает, поэтому каждый раз, когда я создаю новый адаптер и сбрасываю GridView с помощью GridView.setAdapter (newNumberAdapter), он работает, но иногда возникает проблема.
проблема решена, после GridView.setAdapter (newNumberAdapter) добавить этот GridView.invalidateViews() работает для меня!
Где вы указываете данные товара? –
in Конструктор метод – Michael
Я думаю, вы используете listview. getCount() из адаптера не возвращает видимый счетчик элементов. Он возвращает количество элементов, которое содержится в списке. –