Android从listview适配器内部更改背景

时间:2014-12-08 03:40:08

标签: android android-listview parse-platform nullreferenceexception android-parsequeryadapter

我正在尝试更改listview项周围的边框,不幸的是,当我尝试引用布局来更改边框时,我得到空引用错误。 layout.setBackgroundResource(R.drawable.border_purchased);导致空引用。我知道哪里缺少一个方法/概念?

适配器的一部分

    @Override
    public View getItemView(Item object, View v, ViewGroup parent) {
        if (v == null)
        {
            v = View.inflate(getContext(), R.layout.listview_itempage, null);
        }

        super.getItemView(object, v, parent);

        TextView itemTextView = (TextView) v.findViewById(R.id.textViewItemName);
        itemTextView.setText(object.getItemName());

        if(object.getPurchasedStatus() == true)
        {
            RelativeLayout layout = (RelativeLayout) v.findViewById(R.id.itemListBorder);

            layout.setBackgroundResource(R.drawable.border_purchased);
        }

        if(object.getRejectReason() != null)
        {
            RelativeLayout layout = (RelativeLayout) v.findViewById(R.id.itemListBorder);

            layout.setBackgroundResource(R.drawable.border_reject);
        }

        return v;
    }

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:gravity="center_vertical">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="90dp"
        android:orientation="vertical"
        android:id="@+id/itemListBorder"
        android:background="@drawable/border_main"
        >

        <com.parse.ParseImageView
            android:id="@+id/imgStore"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"/>

        <TextView
            android:id="@+id/textViewStoreTitle"
            android:textSize="30dp"
            android:textColor="#FFFFFF"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:layout_alignParentRight="true"/>
        <TextView
            android:id="@+id/textViewStoreItemCount"
            android:textSize="15dp"
            android:textColor="#FFFFFF"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:text="0 items"
            android:layout_below="@id/textViewStoreTitle"/>
    </RelativeLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:0)

在给视图充气时,你没有通过父母:

 if (v == null)
 {
   v = View.inflate(getContext(), R.layout.listview_itempage, null);
 }

 if (v == null)
 {
   v = View.inflate(getContext(), R.layout.listview_itempage, parent);
 }

答案 1 :(得分:0)

您提到这是listview适配器,但我在listview中未看到XML ...为了使用listview适配器,您必须在XML中有一个没有ID的列表。这将创建一个可由android.R.id.list

引用的列表
<ListView
    android:id="@android:id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

从那里你应该可以说

v.setBackgroundResource(R.drawable.border_purchased);

更改背景可绘制。

如果我错了并且您实际上不需要listview这种情况,您仍应尝试v.setBackgroundResource而不是引用您的布局。