0

textviewとimageviewを持つカスタムリストビューを備えたアプリケーションがあります。画像ビューをクリックすると、背景色が変わるはずです。私はこれをやろうとしましたが、取得してい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)で行を検索しようとしています。ImageViewには子ビューが含まれないため、mListRowRLは常にnullである。このようなものを試してください

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 に答える