2015-08-12 3 views
0

Я использовал этот код более 6 месяцев, но прошло уже пару часов, чтобы он не вызывал getview, я не знаю почему. Я зарегистрировал размер адаптера и имеет 1 элемент, но getView не вызывает.android getView не звонит в базовом адаптере

Я также зарегистрировал размер адаптера в getCount() и имеет 1 элемент. это код:

public class ListAdapter extends BaseAdapter { 
    Activity activity; 
    public ArrayList<HashMap<String, String>> list; 

    public ListAdapter(Activity activity, ArrayList<HashMap<String, String>> list) { 
     super(); 
     this.activity = (Activity) activity; 
     this.list = list; 
    } 

    public int getCount() { 
     return list.size(); 

    } 

    public Object getItem(int position) { 
     return list.get(position); 
    } 

    public void addAll(ArrayList<HashMap<String, String>> result) { 
     if (this.list == null) { 
      this.list = result; 
     } else { 
      this.list.addAll(result); 
     } 
     notifyDataSetChanged(); 
    } 

    public HashMap<String, String> geting(int position) { 
     return list.get(position); 
    } 

    public long getItemId(int arg0) { 
     return 0; 
    } 

    private class ViewHolder { 
     ImageView img; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     Log.v("this","comes"); 
     ViewHolder holder; 
     LayoutInflater inflater = activity.getLayoutInflater(); 
     if (convertView == null) { 
      if(isTablet) 
       convertView = inflater.inflate(R.layout.ads_ekhtesasi_grid, null); 
      else 
       convertView = inflater.inflate(R.layout.ads_ekhtesasi, null); 
      holder = new ViewHolder(); 
      holder.img = (ImageView) convertView.findViewById(R.id.img); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     item = list.get(position); 
     Log.v("this",item.get("img")); 


     return convertView; 
    } 

    public void clear() { 
     if (this.list.size() > 0) 
      this.list.clear(); 
    } 
} 

, как вы можете видеть, я положил журнал на первой линии GetView, но не получить.

Не могли бы вы мне помочь? почему это ?

+0

попробуйте вернуть 'arg0' в' getItemId() ' –

+0

, вам нужно изменить свой журнал и поместить значение позиции Log.v (« this », item.get (position)); – br00

+0

@Nilesh спасибо за ответ, но не работает –

ответ

0

Вы забыли о @Override. Все эти методы, как @Override и он будет работать нормально: общественного ИНТ GetCount() публичный объект GetItem (целое положение) общественное мнение GetView (интермедиат положение, Вид convertView, ViewGroup родитель)

public class ListAdapter extends BaseAdapter { 
Activity activity; 
public ArrayList<HashMap<String, String>> list; 

public ListAdapter(Activity activity, ArrayList<HashMap<String, String>> list) { 
    super(); 
    this.activity = (Activity) activity; 
    this.list = list; 
} 

@Override 
public int getCount() { 
    return list.size(); 

} 

@Override 
public Object getItem(int position) { 
    return list.get(position); 
} 

public void addAll(ArrayList<HashMap<String, String>> result) { 
    if (this.list == null) { 
     this.list = result; 
    } else { 
     this.list.addAll(result); 
    } 
    notifyDataSetChanged(); 
} 

public HashMap<String, String> geting(int position) { 
    return list.get(position); 
} 

public long getItemId(int arg0) { 
    return 0; 
} 

private class ViewHolder { 
    ImageView img; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    Log.v("this","comes"); 
    ViewHolder holder; 
    LayoutInflater inflater = activity.getLayoutInflater(); 
    if (convertView == null) { 
     if(isTablet) 
      convertView = inflater.inflate(R.layout.ads_ekhtesasi_grid, null); 
     else 
      convertView = inflater.inflate(R.layout.ads_ekhtesasi, null); 
     holder = new ViewHolder(); 
     holder.img = (ImageView) convertView.findViewById(R.id.img); 
     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    item = list.get(position); 
    Log.v("this",item.get("img")); 


    return convertView; 
} 

public void clear() { 
    if (this.list.size() > 0) 
     this.list.clear(); 
} 

}

+0

Это не поможет. Аннотации '@ Override' не будут волшебным образом заставлять ее работать. Нет необходимости отмечать переопределенные методы с помощью '@ Override', и они все равно будут переопределять методы, если они правильно названы, и имеют правильный профиль аргументов. Использование аннотации '@ Override', как правило, является хорошей идеей, поскольку она позволяет компилятору предупреждать вас, когда вы не переопределяете что-то, когда думаете, что находитесь (например, потому что вы сделали опечатку в имени метода или указали неправильные аргументы). – HexAndBugs

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