突出显示的项目在滚动列表视图时更改位置。如果我在列表视图中选择第一个项目并滚动到末尾,则会在每个7-8个项目之间选择一个。甚至突出显示的项目也会失去其位置,而突出显示第3个项目。我不使用自定义适配器的列表视图,仅用于文本视图。这是代码:
lv=(ListView) findViewById(R.id.listView);
myadaptersong = new ArrayAdapter<String>(this, R.layout.custom_item, R.id.menu, music);
lv.setAdapter(myadaptersong);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if(menuItem != null) menuItem.setBackgroundColor(Color.parseColor("#ffffff"));
menuItem = view;
menuItem.setBackgroundColor(Color.parseColor("#a2aed3"));
});
}
更新: 自定义适配器是这个
public class CustomAdapter extends BaseAdapter {
String music[];
int flag[];
LayoutInflater inflater;
public CustomAdapter(Context context, String[]music, int []flag)
{
this.music=music;
this.flag=flag;
inflater=(LayoutInflater.from(context));
}
@Override
public int getCount() {
return music.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
view=inflater.inflate(R.layout.custom_item,viewGroup,false);
TextView name= (TextView)view.findViewById(R.id.menu);
name.setText(music[position]);
return view;
}
}
我应该在这里做什么?
答案 0 :(得分:2)
您发布的代码无法按您预期的方式工作(如您所知)。假设您的ListView在屏幕上显示了4个项目,并且您单击了第一个项目(项目0,通过更改其背景颜色将其突出显示)。当您向下滚动以查看更多视图且项目0离开屏幕时,项目0的视图将被回收以显示后面的项目(例如项目6)。
现在,第6项使用的是您已经更改了背景颜色的视图,因此它将突出显示。随着视图继续离开屏幕并重新使用,ListView中的其他随机行将突出显示。
您将需要实现一个自定义适配器来执行您想做的事情。