Android 单击和项目视图
我实际上面临着一个我不知道如何解决的问题 事实上,我想改变颜色,并在单击listView时在其上显示图片 问题是当我点击我的第一项时,第0、第9、第18项等等。。。改变太多。。。这就像视图onItemClick只获取listview的可见部分(显示的项目,没有滚动) 我不知道怎么解决它 我的适配器: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
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);
}