Установить изображение на основе данных в методе getView () - PullRequest
0 голосов
/ 12 января 2012

Index, Gainers, Losers - это 3 buttons.При каждом нажатии button, listView заполняется соответствующими данными.

3-й столбец %Chg может быть отрицательным или положительным .

На основании значения %Chg соответствующее arrow должно отображаться в imageView, помещенном после значения столбца %Chg, т.е. стрелка вверх для положительное значение и стрелка вниз для отрицательное значение ...

При любом щелчке button я передаю значение столбца %Chg в массиве с именем updown в Adapter class

На основании этого значения Adapter должен установить down arrow или up arrow

Фрагмент кода изКласс адаптера (метод getView ())

public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        LayoutInflater inflater = activity.getLayoutInflater();

        if (convertView == null) {
            convertView = inflater.inflate(R.layout.list_table, null);
            holder = new ViewHolder();

            holder.txtFirst = (TextView) convertView
                    .findViewById(R.id.FirstText);
            holder.txtSecond = (TextView) convertView
                    .findViewById(R.id.SecondText);
            holder.txtThird = (TextView) convertView
                    .findViewById(R.id.ThirdText);
            holder.ivarrow = (ImageView) convertView.findViewById(R.id.ivarrow);
            holder.l1 = (LinearLayout) convertView
                    .findViewById(R.id.tableLayout);

            convertView.setTag(holder);

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

        HashMap<String, String> map = list.get(position);
//Setting the row background
        if (count % 2 == 0) {
            try {
                InputStream is1 = ctx.getAssets().open("cellbg.png");
                Drawable d1 = Drawable.createFromStream(is1, "cellbg");
                holder.l1.setBackgroundDrawable(d1);

            } catch (Exception e) {
                throw new Error(" exception in TableListAdapter "
                        + e.getMessage());
            }
        } else {
            try {
                InputStream is2 = ctx.getAssets().open("cellbg1.png");
                Drawable d2 = Drawable.createFromStream(is2, "cellbg1");
                holder.l1.setBackgroundDrawable(d2);
            } catch (Exception e) {
                throw new Error(" exception in TableListAdapter "
                        + e.getMessage());
            }
        }
        count++;
//setting the arrow
        if (i < updown.length) {
            if (updown[i] > 0) {
                holder.ivarrow.setImageResource(R.drawable.up);
                Log.v("up", "up");
            } else {
                holder.ivarrow.setImageResource(R.drawable.down);
                Log.v("down", "down");
            }
            Log.v("i=", i + " ,updown=" + updown[i]);
            i++;
        }

        holder.txtFirst.setText(map.get(FIRST_COLUMN));
        holder.txtSecond.setText(map.get(SECOND_COLUMN));
        holder.txtThird.setText(map.get(THIRD_COLUMN));
        return convertView;
    }

.

Журнал показывает правильные данные, но стрелка отображается только в 1-й строке .т. е. если последнее значение списка равно positive, оно показывает up arrow до 1-й строки, а если последнее значение списка равно negative, оно показывает down arrow до 1-й строки ...

Как отобразить соответствующую стрелку в каждой строке ??

Я новичок в разработке Android.Так что ЛЮБАЯ ПОМОЩЬ БУДЕТ СБЕРЕЖАТЬ !!! .

screen

1 Ответ

4 голосов
/ 12 января 2012
if (i < updown.length) {
        if (updown[i] > 0) 
            holder.ivarrow.setImageResource(R.drawable.up);
        else 
            holder.ivarrow.setImageResource(R.drawable.down);
        Log.v("i=", i + " ,updown=" + updown[i]);
        i++;
    }

замените ваш код на:

if (updown[position] > 0) 
            holder.ivarrow.setImageResource(R.drawable.up);
        else 
            holder.ivarrow.setImageResource(R.drawable.down);

И я думаю, что он работает для вас

...