2

滚动时我面临列表视图项目的奇怪选择。

初始选择截图(选择第一个条目) 在此处输入图像描述

滚动列表视图项目后自动选择为什么?(见下面的截图)

在此处输入图像描述

适配器源代码在这里

public View getView(int position, View convertView, ViewGroup parent) {
    View vi=convertView;
    if(convertView==null)
        vi = inflater.inflate(R.layout.list_row, null);

    TextView title = (TextView)vi.findViewById(R.id.title); // title
    TextView artist = (TextView)vi.findViewById(R.id.artist); // artist name
    TextView duration = (TextView)vi.findViewById(R.id.duration); // duration
    ImageView thumb_image=(ImageView)vi.findViewById(R.id.list_image); // thumb image

    HashMap<String, String> song = new HashMap<String, String>();
    song = data.get(position);

    // Setting all values in listview
    title.setText(song.get(CustomizedListView.KEY_TITLE));
    artist.setText(song.get(CustomizedListView.KEY_ARTIST));
    duration.setText(song.get(CustomizedListView.KEY_DURATION));
    imageLoader.DisplayImage(song.get(CustomizedListView.KEY_THUMB_URL), thumb_image);
    return vi;
}

在 setonitemclicklistner() 中使按钮可见是问题所在

list.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {
view.setSelected(true);
view.setBackgroundResource(R.drawable.gradient_bg_hover);   
TextView title;
TextView artist;
title = (TextView)view.findViewById(R.id.title); // title
artist = (TextView)view.findViewById(R.id.artist); // artist
title.setTextColor(getResources().getColor(android.R.color.white));
artist.setTextColor(getResources().getColor(android.R.color.white));

ImageButton btnChild = (ImageButton)view.findViewById(R.id.arrow);
btnChild.setVisibility(View.VISIBLE);

if(lastselected!= null)
{

    title = (TextView)lastselected.findViewById(R.id.title); // title
    artist = (TextView)lastselected.findViewById(R.id.artist); // artist
    title.setTextColor(getResources().getColor(android.R.color.black));
    artist.setTextColor(getResources().getColor(android.R.color.black));

     btnChild = (ImageButton)lastselected.findViewById(R.id.arrow);
    btnChild.setVisibility(View.INVISIBLE);
    lastselected.setBackgroundResource(R.drawable.gradient_bg);
}

lastselected= view;

图像按钮可见后,getview 会为下一个显示项目回收相同的视图。我不知道如何解决这个问题。

4

4 回答 4

1

利用

listview.setSelector(drawable)

如果要更改选择器或禁用它。

于 2013-08-12T11:06:57.497 回答
0

尝试这个:

滚动列表视图时选定的项目问题

由于延迟加载,无法保证视图的状态。如果您存储一个额外的布尔值,或者在您的情况下将另一对字符串存储到您的 HashMap 中(如果更容易)来标记是否选择了歌曲,则会更加精确。实施 ViewHolders 也不会受到伤害。希望这可以帮助。

于 2013-08-12T09:07:02.740 回答
0

您可以使用 onScrollListener 来检测列表何时滚动并防止选择项目。

看看这里(点击)

onScroll() 

滚动列表或网格时调用的回调方法。这将在滚动完成后调用

onScrollStateChanged()

滚动列表视图或网格视图时调用的回调方法。如果视图正在滚动,该方法将在滚动的下一帧渲染之前调用。

于 2013-08-12T08:56:05.733 回答
0

这是适配器的常见缺陷getView()。当视图被回收(convertView不为空)时,您需要将回收的视图重置为其初始状态。在这种情况下,重置回收列表行的选中/选中状态。

于 2013-08-12T09:02:30.130 回答