0

テキストビューと画像(削除)を持つカスタムリストビューを持つアプリケーションがあります。画像をクリックするとその行の背景色が変わり、同じ画像をもう一度クリックすると背景がデフォルトの色に変わります。背景色を変更することはできますが、1 回だけです。2 回変更することはできません。つまり、デフォルトの色に戻すことはできません。

これが私のコードです...

CustomListView.java

public View getView(final 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.dataFields = items.get(position);
        holder.mName = (TextView) convertView
                .findViewById(R.id.hmFieldName);
        holder.mDeleteImage = (ImageView) convertView
                .findViewById(R.id.hmFieldDeleteImage);
        holder.mDeleteCheck = (ImageView) convertView
                .findViewById(R.id.hmFieldDeleteCheck);
        holder.mDeleteMainRL = (RelativeLayout) convertView
                .findViewById(R.id.hmFieldMainRL);
        holder.mDeleteImage.setTag(position);

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

                    @Override
                    public void onClick(View v) {
                        int status = 0;

                        HomeActivity.mDeleteFieldLL
                                .setVisibility(View.VISIBLE);
                        HomeActivity.hmAddField
                                .setVisibility(View.INVISIBLE);

                        holder.dataFields = items.get(position);

                        if (mFieldId.size() == 0) {
                            mFieldId.add(holder.dataFields);
                            ++count;
                            HomeActivity.hmDeleteSelected
                                    .setText("Delete (" + count + ")");

                            clickView.setBackgroundColor(R.color.list_row_bg);

                        } else {
                            for (int i = 0; i < mFieldId.size(); i++) {
                                if (mFieldId.get(i).getId() == holder.dataFields
                                        .getId()) {
                                    status = 1;
                                }
                            }

                            if (status == 0) {
                                mFieldId.add(holder.dataFields);
                                ++count;
                                HomeActivity.hmDeleteSelected
                                        .setText("Delete (" + count + ")");

                                clickView.setBackgroundColor(R.color.list_row_bg);

                            } else if (status == 1) {
                                mFieldId.remove(holder.dataFields);
                                --count;
                                if (count < 0)
                                    count = 0;

                                clickView.setBackgroundColor(R.color.list_row_bg_default); //doesnt changes back to default color

                                HomeActivity.hmDeleteSelected
                                        .setText("Delete (" + count + ")");
                            }
                        }
                    }
                });

        convertView.setTag(holder);
    }

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

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

    return convertView;
}

もう1つの問題は、背景色がcolor.xmlで言及した色ではないことです。さまざまな色を入れてテストしましたが、画像をクリックすると、色が特定の1色だけに変わります。

簡単に言うと、画像をクリックしたときにリストビュー行の背景色を変更し、もう一度クリックするとデフォルトの色に戻す必要があります。

どんな種類の助けも大歓迎です。ありがとう !

4

1 に答える 1

1

すでに色が変わっているのではないかと思いますが、setBackgroundColor()を間違えているので、色が変わっていないようです。

色の問題については、このコードを使用してみてください

clickView.setBackgroundColor(context.getResources().getColor(R.color.list_row_bg));

アダプタをインスタンス化するときに、Contextオブジェクトを渡す必要があります。

またはあなたは次のようなものを使うことができます

layout.setBackgroundColor(0xFFFFFFFF);
于 2013-02-13T15:32:40.553 に答える