невозможно правильно установить фоновое изображение в методе getView - PullRequest
0 голосов
/ 07 января 2012

Ниже показаны код и снимок экрана для отображения данных в listview, содержащих 3 textview.

Я попробовал следующий код в getView() методе класса Adapter, чтобы придать фоновое изображение альтернативным строкам, то есть строке №. 0,2,4 и т.д..

Когда я пытаюсь реализовать это, я получаю вывод, как показано на скриншотах, то есть строки не получают должным образом.

Также см. Ниже xml, в котором используются параметры alignTop и alignBottom, все еще при нажатии кнопки Index, 2-й и 3-й textview не получают цвет фона соответствующим образом.

РЕДАКТИРОВАТЬ - если я использую цвет вместо изображения для фона, он работает хорошо для всех случаев, кроме кнопки Index.

if (count % 2 == 0) {

    try {

        InputStream is = ctx.getAssets().open("cellbg.png");
        Drawable d = Drawable.createFromStream(is, "cellbg");
        holder.txtFirst.setBackgroundDrawable(d);
        holder.txtSecond.setBackgroundDrawable(d);
        holder.txtThird.setBackgroundDrawable(d);
        Log.v("count=", "" + (count++));

    } catch (Exception e) {
        throw new Error(" exception in TableListAdapter " + e.getMessage());
    }
} else {
    Log.v("else count==", "" + (count++));
}      

структура списка (xml)

<TextView
        android:id="@+id/FirstText"
        android:layout_width="80dp"
        android:layout_height="wrap_content"/>

    <TextView
        android:id="@+id/SecondText"
        android:layout_width="55dp"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/FirstText"
        android:layout_alignBottom="@+id/FirstText"/>

    <TextView
        android:id="@+id/ThirdText"
        android:layout_width="40dp"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/FirstText"
        android:layout_alignBottom="@+id/FirstText"/>

1-й экран показывает структуру списка на момент запуска приложения, где по умолчанию нажимается кнопка Gainers.

2-й показывает случай нажатия кнопки Index.

3-й показывает случай повторного нажатия кнопки Gainers после нажатия индексной кнопки.

4-й показывает макет при нажатии List item.

Что я делаю не так?

ЛЮБАЯ ПОМОЩЬ БУДЕТ ЖИЗНЕННОЙ !!!

screen

Ответы [ 3 ]

1 голос
/ 07 января 2012

Это выглядит как проблема повторного использования представления, но я не могу быть уверен, потому что я не вижу эту часть кода. В вашем getView вы повторно используете представления (т. Е. Используете ли вы параметр convertView)? Если вы это сделаете, то это ваш ответ. Вы должны всегда устанавливать фон в цвет, который вы хотите. Примерно так:

if (count % 2 == 0) {
    ...
    holder.txtFirst.setBackgroundDrawable(d);
} else {
    holder.txtFirst.setBackgroundDrawable(myDefaultRowColor);
}
1 голос
/ 07 января 2012

Пара вещей ... не уверен, что это за разные кнопки и что они делают, но это не должно иметь значения ...

Вы должны установить фон также, когда (count % 2 != 0), потому что представления могутиспользовать повторно в списке, так что лучше быть в безопасности.

Кроме того, вместо того, чтобы устанавливать фон для различных TextViews по отдельности, почему бы не установить его только для ViewGroup, который содержит все эти TextViews (Я представляю LinearLayout или что-то в этом роде?

Просто чтобы перепроверить, count - это аргумент, который вы получаете, когда вызывается getView?Может быть, вы могли бы опубликовать немного больше кода вашего getView метода, который, вероятно, поможет (чтобы получить лучший ответ).

0 голосов
/ 07 января 2012

вы используете setbackgrounddrawable, но я думаю, что вы должны использовать приведенный ниже код для установки изображения

holder.txtFirst.setImageResource(R.drawable.Imagename);
...