无法在getView方法中正确设置背景图像

时间:2012-01-07 06:58:01

标签: android android-listview textview android-button

以下显示用于在listview中显示包含3 textview的数据的代码和屏幕截图。

我在getView()类的Adapter方法中尝试了以下代码,以便为备用行提供背景图像,即行号。 0,2,4等

当我尝试实现这个时,我得到屏幕截图中显示的输出,即行没有得到适当的影响。

另请参阅下面xml,其中使用了alignTopalignBottom参数,仍在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"/>

第一个屏幕显示应用程序启动时的列表结构,默认情况下,按下Gainers按钮。

2nd显示按Index按钮的实例。

3rd显示按下索引按钮后再次按下Gainers按钮的实例。

第4个显示点击List item时的布局。

我做错了什么?

任何帮助都将有益于生命!

screen

3 个答案:

答案 0 :(得分:1)

一些事情....不确定不同的按钮是什么以及它们做了​​什么,但它应该无关紧要......

您应该在(count % 2 != 0)时设置背景,因为视图可以在列表中重复使用,因此最好是安全的。

此外,不是单独为不同的TextViews设置背景,为什么不为仅包含所有ViewGroup的{​​{1}}设置背景(我想象TextViews或类似的东西)?

只是要仔细检查,LinearLayout是调用count时得到的参数? 也许你可以发布一些getView方法的代码,这可能会有所帮助(以获得更好的答案)。

答案 1 :(得分:1)

这看起来是一个视图重用问题,但我无法确定,因为我没有看到代码的那一部分。在您的getView中,您是否重复使用了视图(即您是否使用了convertView参数)?如果你这样做,那就是你的答案。您必须始终将背景设置为所需的颜色。像这样:

if (count % 2 == 0) {
    ...
    holder.txtFirst.setBackgroundDrawable(d);
} else {
    holder.txtFirst.setBackgroundDrawable(myDefaultRowColor);
}

答案 2 :(得分:0)

你正在使用setbackgrounddrawable,但我认为你必须使用下面的代码来设置图像

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