【问题标题】:OnItemClick and item viewOnItemClick 和项目视图
【发布时间】:2014-06-18 11:44:56
【问题描述】:

我实际上面临一个我不知道如何解决的问题......

其实我是想改变颜色,点击后在listView上显示图片。

问题是当我点击我的第一个项目时,第 0 个、第 9 个、第 18 个等......也发生了变化......就像 View onItemClick 只占用列表视图的可见部分(显示的项目,没有滚动)

我不知道如何解决它。

我的适配器:

public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder holder = null;

        LayoutInflater mInflater = (LayoutInflater) context
                .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {

            convertView = mInflater
                    .inflate(R.layout.item_anomalies, null);

            holder = new ViewHolder();

            holder.txtTitre = (TextView) convertView
                    .findViewById(R.id.titre);

            holder.img = (ImageView) convertView
                    .findViewById(R.id.img);

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

        final AnomalieRowItem rowItem = (AnomalieRowItem) getItem(position);

        holder.txtTitre.setText(rowItem.getLibelle());

        if (position % 5 == 0) {
            holder.img.setBackgroundColor(0xffED695A);
        } else {
            if (position % 4 == 0) {
                holder.img.setBackgroundColor(0xffEB5443);
            } else {
                if (position % 3 == 0) {
                    holder.img.setBackgroundColor(0xffEA4735);
                } else {
                    if (position % 2 == 0) {
                        holder.img.setBackgroundColor(0xffE93825);
                    } else {
                        holder.img.setBackgroundColor(0xffD52815);
                    }
                }
            }
        }

        return convertView;
    }

我的听众:

 private void initListener() {
        m_ListeAnomalie.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                AnomalieRowItem item = m_ListeItem.get(position);

                ImageView imgCheck = (ImageView) view.findViewById(R.id.check);
                LinearLayout layout = (LinearLayout) view.findViewById(R.id.item);

                if (item.isChecked()) {
                    layout.setBackgroundColor(0xffefefef);
                    item.setChecked(false);
                    imgCheck.setVisibility(View.GONE);
                } else {
                    layout.setBackgroundColor(0xffdddddd);
                    item.setChecked(true);
                    imgCheck.setVisibility(View.VISIBLE);
                }

                m_Adapter.notifyDataSetChanged();
            }
        });

        m_Valider.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                end();
            }
        });
    }

感谢您的帮助

编辑:带模数和背景的部分工作正常,我的问题出在侦听器中,好像不是在 OnItemClick 函数中注入的正确视图

编辑2:我认为最好有图片

【问题讨论】:

  • 您能详细说明一下吗?我不明白你的问题是什么以及你想要实现什么。
  • 我已经编辑了我的帖子
  • 我检查了你的代码.. 因为你使用 ImageView 而不是 Checkbox。第二件事 onItemClick 你得到项目 Class 。 item.isChecked() ,因为您将获得旧值而不是新值。
  • 您可以在 getView() 中实现代码。 checkBox 的 onClick 方法。
  • 要么,在 onItemClicked() 事件中,您必须使用视图获取子视图,然后将其转换为复选框并检查是否为真..

标签: android listview view onitemclick


【解决方案1】:
if (position % 5 == 0) {
            holder.img.setBackgroundColor(0xffED695A);
        } else {
            if (position % 4 == 0) {
                holder.img.setBackgroundColor(0xffEB5443);
            } else {
                if (position % 3 == 0) {
                    holder.img.setBackgroundColor(0xffEA4735);
                } else {
                    if (position % 2 == 0) {
                        holder.img.setBackgroundColor(0xffE93825);
                    } else {
                        holder.img.setBackgroundColor(0xffD52815);
                    }
                }
            }
        }
// add this lines in getView() after above logic.
if (rowItem.isChecked()) {
                    layout.setBackgroundColor(0xffefefef);
                    imgCheck.setVisibility(View.GONE);
                } else {
                    layout.setBackgroundColor(0xffdddddd);
                    imgCheck.setVisibility(View.VISIBLE);
                }

【讨论】:

    【解决方案2】:

    您没有在 getView 中使用rowItem.isChecked()

    【讨论】:

    • 因为我不需要它:o。我在活动中使用它,在那里我改变了我的背景颜色。将监听器放在适配器中是否正确?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多