2014-11-25 3 views
0

искали наиболее распространенные подобные темы, но ничего не помогло.getView никогда не назывался Baseadapter

public class NewCustomAdapter extends BaseAdapter { 

    Context activityContext; 
    LayoutInflater myInflater; 
    Drawable[] myDrawableArray; 
    String[] myLabelArray; 
    String[] myABCArray; 
    int position = 0; 
    ImageView myImg; 
    TextView myLabelTextView; 
    TextView myABCTextView; 

    public NewCustomAdapter(Context context) { 

     // TODO Auto-generated constructor stub 
     this.activityContext = context; 
     myInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public int getCount() { 

     // TODO Auto-generated method stub 
     Log.e("getcount","true " + position); 
     return position; 
    } 

    @Override 
    public Object getItem(int position) { 

     // TODO Auto-generated method stub 
     return position; 
    } 

    @Override 
    public long getItemId(int position) { 

     // TODO Auto-generated method stub 
     return position; 
    } 

    public class Holder { 

     ImageView img; 
     TextView tv; 
     TextView abc; 

     public Holder(ImageView img, TextView tv, TextView abc) { 

      this.img = img; 
      this.tv = tv; 
      this.abc = abc; 
     } 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 

     // TODO Auto-generated method stub 
     Log.e("getView","true"); 
     if(convertView == null) { 

      convertView = myInflater.inflate(R.layout.customadapter_view_layout_medium, null); 
      myImg = (ImageView)  convertView.findViewById(R.id.imageview_layout_normal_portrait_sizemedium); 
      myLabelTextView = (TextView) convertView.findViewById(R.id.textview_label_layout_normal_portrait_sizemedium); 
      myABCTextView = (TextView) convertView.findViewById(R.id.textview_abc_layout_normal_portrait_sizemedium); 
      convertView.setTag(new Holder(myImg,myLabelTextView, myABCTextView)); 
     } else { 

      Holder holder = (Holder) convertView.getTag(); 
      myImg = holder.img; 
      myLabelTextView = holder.tv; 
      myABCTextView = holder.abc; 
     } 
     myImg.setImageDrawable(myDrawableArray[position]); 
     myLabelTextView.setText(myLabelArray[position]); 
     myABCTextView.setText(myABCArray[position]); 

     return convertView; 
    } 

    public void updateGridView(Drawable[] myDrawableArray_, String[] myLabelArray_, String[] myABCArray_, int position_) { 

     this.myDrawableArray = myDrawableArray_; 
     this.myLabelArray = myLabelArray_; 
     this.myABCArray = myABCArray_; 
     this.position = position_; 
     this.notifyDataSetChanged(); 
    } 
} 

Это нормальный базовый адаптер, который получает обновление с моего фона. My BackgroundThread звонки

updateGridView(...) 

способ. Метод называется требуемым. getCount также вызывается каждый раз, когда я вызываю updateGridView .. так что это работает. Только проблема. GridView не раздувается. getView никогда не вызывается.

в моем AsyncTask я правильно установить на UIThread (onPreExecute()):

gv = (GridView) myActivityView.findViewById(R.id.gv1); 
myCustomAdapter = new NewCustomAdapter(myActivityContext); 
gv.setAdapter(myCustomAdapter); 

Нет ошибок, GetView не только не называли, поэтому GridView никогда не завышены ... Любая помощь приветствуется.

+0

Есть много проблемы в вашем коде я думаю должен пройти соответствующий учебник базового адаптера. getView вызывается, когда есть какие-либо элементы списка здесь нет списка, переходящего к контструктору вашего CustomAdapter –

+0

@DanialHussain, который звучит хорошо или плохо. Итак, моя проблема заключается в том, что я передаю массив, а не список? И поэтому он никогда не вызывает getView .. – MMike

+0

myCustomAdapter = новый NewCustomAdapter (myActivityContext); есть проблема –

ответ

1

getView вызывается, если getCount возвращает что-то != 0,

+0

Благодарим вас за ответ. Ознакомьтесь с моим методом updateGridView. Где я устанавливаю позицию на число выше 0. Так что после того, как я уведомил BaseAdapter с более высокой позицией, getView нужно было бы назвать ... он никогда не остается 0! Точно в самом начале .. Другими словами, я также попытался установить положение в начале до 1, тот же вопрос появляется, поэтому он не имеет ничего общего с началом позиции с 0 – MMike

0

Вы должны возвратить общее количество в методе GetCount

Поскольку ваша первая позиция 0 ваш метод GetCount возвращает 0, а адаптер не думает, что нет элементы, которые будут отображаться в списке.

+0

Благодарим вас за ответ. Ознакомьтесь с моим методом updateGridView. Где я устанавливаю позицию на число выше 0. Так что после того, как я уведомил BaseAdapter с более высокой позицией, getView нужно было бы назвать ... он никогда не остается 0! Точно в самом начале .. Другими словами, я также попытался установить положение в начале до 1, то проблема возникла, так как это не имеет никакого отношения к позиции начинается с 0 – MMike

+0

Я думаю, проблема в том, что вы пытаетесь обновите пользовательский интерфейс в обратном потоке, так как вы вызываете этот метод updateGridView из фонового потока, попробуйте выполнить его в UIThread и, возможно, он будет работать. –

+0

Пробовал это, эта же проблема. Я думаю, что проблема в том, что я не передаю список, а массив. Это возможно? Если да, то как мне настроить адаптер, передающий мои массивы? – MMike

2

GetCount() возвращают размер список данных, а также надлежащим образом осуществлять ViewHolder шаблон проектирования для выполнения ListView:

@Override 
public int getCount() { 
    return myDrawableArray.length; 
} 

Пример:

public class NewCustomAdapter extends BaseAdapter { 

    Context context; 
    Drawable[] myDrawableArray; 
    String[] myLabelArray; 
    String[] myABCArray; 
    int position; 
    public NewCustomAdapter(Context context) { 
     this.context = context; 
    } 

    @Override 
    public int getCount() { 
     return myDrawableArray.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return myDrawableArray[position]; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    public class Holder { 
     ImageView img; 
     TextView tv; 
     TextView abc; 
    } 


    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     Holder holder; 
     if(convertView == null) { 
      holder = new Holder(); 
      convertView = LayoutInflater.from(context).inflate(R.layout.customadapter_view_layout_medium, null); 
      holder.img = (ImageView) convertView.findViewById(R.id.imageview_layout_normal_portrait_sizemedium); 
      holder.tv = (TextView) convertView.findViewById(R.id.textview_label_layout_normal_portrait_sizemedium); 
      holder.abc = (TextView) convertView.findViewById(R.id.textview_abc_layout_normal_portrait_sizemedium); 
      convertView.setTag(holder); 
     } else { 
      holder = (Holder) convertView.getTag(); 
     } 
     holder.img.setImageDrawable(myDrawableArray[position]); 
     holder.tv.setText(myLabelArray[position]); 
     holder.abc.setText(myABCArray[position]); 

     return convertView; 
    } 

    public void updateGridView(Drawable[] myDrawableArray_, String[] myLabelArray_, String[] myABCArray_, int position_) { 
     this.myDrawableArray = myDrawableArray_; 
     this.myLabelArray = myLabelArray_; 
     this.myABCArray = myABCArray_; 
     this.position = position_; 

     this.notifyDataSetChanged(); 
    } 
} 
+0

Благодарим вас за отзыв. В моем случае это невозможно. Мне нужно вернуть позицию, а не длину моего массива. Во всяком случае, короткое время назад я смог начать работу с позицией. Нет необходимости возвращать Array.length. Я думаю, проблема заключается в том, что я передаю массив, а не список. Вы думаете, что то же самое? – MMike

+0

Теперь проверьте мои обновленные ан ... –

+0

@ MMike, вы попробовали обновленные анс? –

Смежные вопросы