我的代码有一个ListView的通知,当用户点击通知时,它的颜色会发生变化。但我的问题是,当用户点击第一行时,另一行颜色也会自动更改,与其他行相同。
notiId.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adpterView, View view, int position,
long id) {
String sr_msg=arrayList.get(position);
String sr_title= list_tittle.get(position);
ArrayList<String> arr_intent = new ArrayList<String>();
arr_intent.add(sr_msg);
arr_intent.add(sr_title);
Intent intent = new Intent(getActivity(), NotiPerList.class);
Bundle args = new Bundle();
args.putSerializable("NOTI", (Serializable) arr_intent);
intent.putExtra("NOTI",arr_intent );
startActivity(intent);
String yn=arr2.get(position);
String s2= arr3.get(position).toString();
notiId.getChildAt(position).setBackgroundColor(Color.GRAY);
}
}
修改
@Override
public View getView(int position, View v, ViewGroup parent)
{
View mView = v ;
if(mView == null) {
LayoutInflater vi = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = vi.inflate(id, null);
}
listView=(ListView)mView.findViewById(R.id.notiID);
String sd= yORn.get(position);
if(sd.equals("Y")){
mView.setBackgroundColor(Color.GRAY);
}
}
答案 0 :(得分:1)
这就是ListView
的工作原理。它正在重复使用屏幕外的视图。您必须告诉Adapter
更改特定索引视图的颜色,而不是直接更改视图。
这样的事情:
@Override
public void onItemClick(AdapterView<?> adpterView, View view, int position,
long id) {
...
yourAdapter.setHighLightedViewIntex(position);
yourAdapter.notifyDataSetChanged();
}
在Adapter
:
getView(...) {
if(highlightedPosition == position) {
//set background to highlighted
} else {
//set background to regular
}
}
答案 1 :(得分:0)
删除此行
notiId.getChildAt(position).setBackgroundColor(Color.GRAY);
如果您的列表有多个选择,那么