ListView не показывает правильные значения после прокрутки - PullRequest
4 голосов
/ 24 декабря 2011

В моем приложении я использую CustomListView с ArrayAdapter для отображения времени в разных странах.Но после 6-7 строк (в зависимости от размера экрана телефона) значения времени повторяются.

В соответствии с некоторым предыдущим постом я написал следующий фрагмент кода, чтобы найти решение.Но проблема все еще существует.

Ниже приведен код, который я написал:

 public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;

        Order o = items.get(position);
        if (v == null) {

            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            LinearLayout ll = (LinearLayout) vi.inflate(R.layout.row, null);


            CustomDigitalClock customDC = new CustomDigitalClock(CityList.this, o.getOrderTime());

            LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.FILL_PARENT);

            customDC.setTextColor(Color.WHITE);
            customDC.setTextSize(13);

            LayoutParams param=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

            ll.addView(customDC, 2);
            v = ll;
      }   
         if (o != null) {
            TextView tt = (TextView) v.findViewById(R.id.toptext);
            TextView bt = (TextView) v.findViewById(R.id.bottomtext);

            if (tt != null) {
                tt.setText("" + o.getOrderName());
            }
            if (bt != null) {
                bt.setText("" + o.getOrderStatus());
             }
          v.setOnCreateContextMenuListener(this);

        }
        return v;
    }

Кто-нибудь может мне помочь?

1 Ответ

3 голосов
/ 24 декабря 2011

ListViews перерабатывают представления, что означает, что сначала базовый набор записей списка раздувается из XML.При прокрутке вниз одна запись списка скрывается вверху, а новая - внизу.В этот момент getView() вызывается с ненулевым аргументом convertView, потому что уже завышенное представление используется повторно.

В вашем случае это означает, что вся инфляция / настройка макета пропускается (дерево if (v == null)) .Это нормально, в основном все, что вам нужно сделать, это обновить метку времени в секунде, если раздел (o != null) .

Он должен содержать что-то похожее на это, как вы сделали сtextviews тоже:

CustomAnalogClock customAC = (CustomAnalogClock) v.findViewById(R.id.yourclockid);
customAC.setTime(o.getOrderTime());

Это означает, что вы должны назначить идентификатор (используя setId()) вашему представлению при добавлении его в макет, а также иметьsetTime() метод готов.

...