2013-10-24 4 views
0

как обновить GridView в моем коде, когда я использовал этот код cla.notifyDataSetChanged; скажем, не может решить, как добавить метод notifyDataSetChanged в мой класс адаптера? пожалуйста, помогите мне, что вы делаете? мой класс адаптера не notifyDataSetChange методКак добавить метод notifyDataSetChanged в базовом адаптере

public class fifthscreen extends Activity { 
    private AQuery androidAQuery; 
    CategoryListAdapter3 cla; 
    androidAQuery = new AQuery(this); 
    static ArrayList<String> Category_name = new ArrayList<String>(); 
    static ArrayList<String> Category_image = new ArrayList<String>(); 

    cla = new CategoryListAdapter3(fifthscreen.this); 
    gidView.setAdapter(cla); 

адаптер класса

public class CategoryListAdapter3 extends BaseAdapter { 

    private Activity activity; 


    private AQuery androidAQuery; 


    public CategoryListAdapter3(Activity act) { 
     this.activity = act; 
    // imageLoader = new ImageLoader(act); 
    } 

    public int getCount() { 
     // TODO Auto-generated method stub 
     return fifthscreen.Category_ID.size(); 
    } 

    public Object getItem(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     ViewHolder holder; 
     androidAQuery = new AQuery(getcontext()); 
     if(convertView == null){ 
      LayoutInflater inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      convertView = inflater.inflate(R.layout.viewitem2, null); 
      holder = new ViewHolder(); 

      convertView.setTag(holder); 
     }else{ 
      holder = (ViewHolder) convertView.getTag(); 
     } 


     holder.txtText = (TextView) convertView.findViewById(R.id.title2); 
     holder.imgThumb = (ImageView) convertView.findViewById(R.id.image2); 

     holder.txtText.setText(fifthscreen.Category_name.get(position)); 


     androidAQuery.id(holder.imgThumb).image(fifthscreen.Category_image.get(position), true,true); 

     return convertView; 
    } 
    private Activity getcontext() { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    static class ViewHolder { 
     TextView txtText; 
     ImageView imgThumb; 
    } 

} 
+1

cla.notifyDataSetChanged() верен. Какая у вас ошибка? –

+0

где я размещаю эту строку? перед этой строкой listview.setAdapter (cla); или после этой строки? – user2914381

+0

где i place cla.notifyDataSetChanged() перед gridView.setAdapter (cla); или после gridView.setAdapter (cla); – user2914381

ответ

0

после gidView.setAdapter (cla); Неисправность перед этой линией вашего адаптера еще не установлена.

, но вам нужно решить, когда его называть, означает, что вы вызываете эту строку (cla.notifyDataSetChanged()) после внесения изменений в один из компонентов adpater и вы хотите, чтобы это было показано сразу ..

+0

Я просто хочу, чтобы каждый раз, когда actoivity запустил мое обновление сетки, чтобы вызвать первый cla.notifyDataSetChanged() или gidView.setAdapter (cla); – user2914381

+0

во-первых, вы не можете вызвать cla.notifyDataSetChanged() перед вызовом gidView.setAdapter (cla); потому что адаптер не работает до тех пор, пока вы не установите его в строке (gidView.setAdapter (cla);), поэтому вам нечего будет уведомлять об изменениях .. поэтому вам нужно поместить эту строку gidView.setAdapter (cla); ПЕРЕД этой строкой cla.notifyDataSetChanged(). НО, если вы не внесете никаких изменений в gridview (добавление/удаление .. фотографий), вам НЕ ПОЛУЧИТЬ вызов cla.notifyDataSetChanged() вообще.потому что эта линия должна называться ВО ВРЕМЯ RUNTIME, вам не нужно ее вызывать, когда приложение запускается. –

0

По вашему вопросу, что я понял, что вы хотите правильное место для notifyDataSetChanged() метода

Раствор notifyDataSetChanged() используется, когда изменения данных адаптера, следовательно, изначально, когда вы заполнили массив, он статичен и не будет изменен, поэтому он не нужен здесь. поэтому после того, что согласно вашей логике, если

static ArrayList<String> Category_name = new ArrayList<String>(); 
static ArrayList<String> Category_image = new ArrayList<String>(); 

Изменения после этого вы должны вызвать

cla.notifyDataSetChanged() 

который будет обновить ListView.

+0

i call cla.notifyDataSetChanged() перед этой строкой или после? gridView.setAdapter (CLA); – user2914381

+0

Это всегда после установки адаптера, поэтому после этой строки, и вы должны это вызывать, только когда ваши данные для адаптера изменены –

+0

это разрешает вашу проблему? –

0

вы можете обновить эту деятельность самой с помощью намерения, но его не хороший способ !!

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