Собственный адаптер для Android - PullRequest
0 голосов
/ 28 февраля 2012

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

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

  • Мой основной класс деятельности - это расширение ListActivity.
    • public static ArrayList freqzo; статический MobileArrayAdapter freqz;
    • freqzo = new ArrayList (); freqz = новый MobileArrayAdapter (this, freqzo);
    • this.setListAdapter (freqz); ListView lv = getListView ();
    • lv.setTextFilterEnabled (истина); // И моя часть заполнения архива: if (store
    • instanceof Vector) {Object [] arr = ((Vector) store) .toArray (); для
    • (int i = 0; i

Класс моего мобильного адаптера:

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;
    }
}

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

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

0 голосов
/ 02 марта 2012

Эта часть плохая:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...