0

我有一个带有自定义列表视图的应用程序,它有一个文本视图和一个图像视图。当我单击图像视图时,背景颜色应该会改变。我试图这样做,但得到NullPointerException......这是我的代码

CustomListViewAdapter.java

public class ViewHolder {
    TextView mName;
    ImageView mDeleteImage;
}

public View getView(int position, View convertView, ViewGroup parent) {
    holder = null;
    DataFields rowItems = (DataFields) getItem(position);
    LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);

    if (convertView == null) {
        convertView = inflater.inflate(R.layout.home_field_row, null);
        holder = new ViewHolder();
        holder.mName = (TextView) convertView.findViewById(R.id.hmFieldName);
        holder.mDeleteImage = (ImageView)convertView.findViewById(R.id.hmFieldDeleteImage);

        convertView.setTag(holder);

        holder.mDeleteImage.setTag(position);

        holder.mDeleteImage.setOnClickListener(new ImageView.OnClickListener() {

            @Override
            public void onClick(final View view) {
                count++;
                mListRowRL = (RelativeLayout)view.findViewById(R.id.hmFieldMainRL);
                mListRowRL.setBackgroundColor(color.list_row_bg); //throwing NullPointerException
            }
        });
    }

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

    holder.mName.setText(rowItems.getName());

    return convertView;
}

任何形式的建议都非常感谢。谢谢 !

4

2 回答 2

0
holder.mDeleteImage.setOnClickListener(new ImageView.OnClickListener() {

            @Override
            public void onClick(final View view) {
                count++;
                mListRowRL = (RelativeLayout)view.findViewById(R.id.hmFieldMainRL);
                mListRowRL.setBackgroundColor(color.list_row_bg); //throwing NullPointerException
            }
        });

您正在为 ImageView 分配一个单击侦听器,这很好。但是在您的 onClick 方法中,您尝试搜索传入的视图(这是一个 ImageView)以查找您的行。ImageViews 将不包含任何子视图,因此您的 mListRowRL 将始终为空。尝试这样的事情

final View clickView = convertView;
holder.mDeleteImage.setOnClickListener(new ImageView.OnClickListener() {

                @Override
                public void onClick(final View view) {
                    count++;
                    clickView.setBackgroundColor(color.list_row_bg); 
                }
            });
于 2013-02-08T16:08:39.013 回答
0

我曾经遇到过这个奇怪的错误

我在你的 XML 上用这个解决了它(好吧谷歌它:)):

<ListView
    android:id="@android:id/list"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
    android:focusable="false"
    android:focusableInTouchMode="false" />

然后你必须为你的根行项目分配一个选择器:

<LinearLayout
    android:id="@+id/LinearLayoutApplication"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@color/list_selector">

最后是选择器(res/color 上的 list_selector.xml):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:drawable="@color/light_blue"
        android:state_pressed="true" />
    <item
        android:drawable="@color/light_blue"
        android:state_selected="true" />
    <item
        android:drawable="@color/transparent" />
</selector>
于 2013-02-08T16:10:00.427 回答