滚动列表视图时突出显示的项目更改位置

时间:2018-07-15 04:32:17

标签: android listview

突出显示的项目在滚动列表视图时更改位置。如果我在列表视图中选择第一个项目并滚动到末尾,则会在每个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;
}

}

我应该在这里做什么?

1 个答案:

答案 0 :(得分:2)

您发布的代码无法按您预期的方式工作(如您所知)。假设您的ListView在屏幕上显示了4个项目,并且您单击了第一个项目(项目0,通过更改其背景颜色将其突出显示)。当您向下滚动以查看更多视图且项目0离开屏幕时,项目0的视图将被回收以显示后面的项目(例如项目6)。

现在,第6项使用的是您已经更改了背景颜色的视图,因此它将突出显示。随着视图继续离开屏幕并重新使用,ListView中的其他随机行将突出显示。

您将需要实现一个自定义适配器来执行您想做的事情。