2012-02-28 7 views
0

Извините за мой английский. У меня есть свой собственный ArrayAdapter для активности списка. Моя проблема: когда я беру данные для веб-службы, данные добавляются ArrayList. Здесь все нормально. Nexus и Android OS 4.0 перечисляют данные, но другие телефоны и 2.3.3 не перечисляют данные. Все нормально, и я не получил никаких ошибок.Антенный собственный адаптер для Array

Я понятия не имею, в чем проблема. Списки программ с Nexus (OS 4.0), но не перечислены в 2.3.3.

  • Мой основной класс деятельность распространяется ListActivity
    • общественный статический ArrayList freqzo; статический MobileArrayAdapter freqz;
    • freqzo = new ArrayList(); freqz = новый MobileArrayAdapter (это, freqzo);
    • this.setListAdapter (freqz); ListView lv = getListView();
    • lv.setTextFilterEnabled (true); // И моя заполняющая часть arraylist: if (store
    • instanceof Vector) {Object [] arr = ((Векторный) магазин) .toArray(); для
    • (int i = 0; i < arr.length; i ++) {freqzo.add ((String) arr [i] .toString()); }

Мой Мобильный класс Adapter:

public class MobileArrayAdapter extends ArrayAdapter<String> { 

    private final Context context; 
    private final ArrayList<String> values; 

    public MobileArrayAdapter(Context context, ArrayList<String> values) { 
     super(context, R.layout.listlayout, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     View rowView = inflater.inflate(R.layout.listlayout, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.logo); 

     String s = values.get(position); 
     Log.d("Liste", "Liste " + values.get(position)); 
     if (s != null && !s.equals("")) { 
      textView.setText(s); 
     } 

     // Change icon based on name 
     // String s = values[position]; 

     return rowView; 
    } 
} 

ответ

1

Может быть, после заполнения списка вы должны позвонить adapter.notifyDataSetChanged()?

+0

Спасибо, мой freand, это работа. –

0

Этот кусок плохо:

LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    View rowView = inflater.inflate(R.layout.listlayout, parent, false); 

первых, вы не использовать вид, который был создан для вас адаптером, но всегда создавать новый. Java-машина очистит лишние объекты, но это займет кучу времени. Во-вторых, ArrayAdapter может выполнять всю работу. Посмотрите here

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