2015-05-14 4 views
-2

ниже мой код адаптера и журналы (тег журнала «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() работает для меня!

+0

Где вы указываете данные товара? –

+0

in Конструктор метод – Michael

+0

Я думаю, вы используете listview. getCount() из адаптера не возвращает видимый счетчик элементов. Он возвращает количество элементов, которое содержится в списке. –

ответ

0

Я считаю, что вы используете AsyncTask .Intialise в ArrayList ArrayList<NumberModel> mPhoneNumberList (который вы отправляете в качестве аргумента в конструкторе адаптера) в doInBackground (String ... Params) из asynctask like: mPhoneNumberList=new ArrayList<NumberModel>вместо создания экземпляра в onCreate().

Попробуйте решение. Я верю, что ваш адаптер будет обновлен.

+0

не в Asynctask, адаптер gridView создан в методе instantiateItem() в PagerAdapter – Michael

+0

, просто создайте экземпляр arraylist перед вызовом setadapter – kgandroid

0

проблема решена, после GridView.setAdapter (newNumberAdapter) добавить это GridView.invalidateViews() работает для меня!