Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 单击和项目视图_Android_Listview_View_Onitemclick - Fatal编程技术网

Android 单击和项目视图

Android 单击和项目视图,android,listview,view,onitemclick,Android,Listview,View,Onitemclick,我实际上面临着一个我不知道如何解决的问题 事实上,我想改变颜色,并在单击listView时在其上显示图片 问题是当我点击我的第一项时,第0、第9、第18项等等。。。改变太多。。。这就像视图onItemClick只获取listview的可见部分(显示的项目,没有滚动) 我不知道怎么解决它 我的适配器: public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder

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

事实上,我想改变颜色,并在单击listView时在其上显示图片

问题是当我点击我的第一项时,第0、第9、第18项等等。。。改变太多。。。这就像视图onItemClick只获取listview的可见部分(显示的项目,没有滚动)

我不知道怎么解决它

我的适配器:

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();
            }
        });
    }
private void initListener(){
m_listenomalite.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
AnomalieRowItem item=m_ListeItem.get(位置);
ImageView imgCheck=(ImageView)view.findViewById(R.id.check);
LinearLayout布局=(LinearLayout)视图.findViewById(R.id.item);
如果(item.isChecked()){
布局。setBackgroundColor(0xffefefef);
项。设置已检查(假);
imgCheck.setVisibility(View.GONE);
}否则{
布局.设置背景颜色(0xFFDDDD);
item.setChecked(真);
imgCheck.setVisibility(View.VISIBLE);
}
m_Adapter.notifyDataSetChanged();
}
});
m_Valider.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
end();
}
});
}
谢谢你的帮助

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

编辑2:我认为有一张照片会更好


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

因为我不需要它:o。我在活动中使用它,在活动中我更改背景颜色。将侦听器放在适配器中是否正确?能否请您详细说明?我不明白你的问题是什么,你想实现什么。我已经编辑了我的帖子,我已经检查了你的代码。。在这种情况下,您必须使用ImageView而不是复选框。第二件事是单击你得到的物品类别。item.isChecked(),因为您将获得旧值而不是新值。您可以在getView()中实现代码。或者,在onItemClicked()事件中,您必须使用view获取子视图,然后将其转换为checkBox,然后检查是否为true。。
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);
                }