当我向下滚动时,列表视图项目标记在列表下方

Posted

技术标签:

【中文标题】当我向下滚动时,列表视图项目标记在列表下方【英文标题】:when I scroll down the listview items are marked below the list 【发布时间】:2014-11-15 16:06:49 【问题描述】:

我创建了一个列表视图,显示他标记了这个调用:view.setBackgroundResource (R.drawable.active_row) 但是,当您向下滚动列表时,它会标记 lista.exe 下面的项目: 屏幕上显示了 10 个项目,当滚动列表时标记为第一个,以便显示第 11 个,它将这 11 个项目标记为第一个:

    final ArrayList<HashMap<String, String>> songsListData = new ArrayList<HashMap<String, String>>();
    SongsManager plm = new SongsManager();
    // get all songs from sdcard
    this.songsList = plm.getPlayList();
    // looping through playlist
    for (int i = 0; i < songsList.size(); i++) 
        // creating new HashMap
        HashMap<String, String> song = songsList.get(i);

        // adding HashList to ArrayList
        songsListData.add(song);
    
    // Adding menuItems to ListView
     final ListAdapter adapter = new SimpleAdapter(this, songsListData,
            R.layout.playlist_item, new String[]  "songTitle" , new int[] 
                    R.id.songTitle2 );
    setListAdapter(adapter);

ListView lv = getListView();
    // listening to single listitem click
    lv.setOnItemClickListener(new OnItemClickListener() 
        int flag1 = 0;
        int flag2 = 0;

        int auxPosicao1 = -1;//primeira vez
        int auxPosicao2 = -1;//primeira vez

        @SuppressWarnings("unused")
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) 

            View lastRow = null;        
            if (lastRow != null) 
                lastRow.setBackgroundColor(0x00000000);
                
            if (flag1==0 &&((auxPosicao1 == position || (auxPosicao1 == -1 && auxPosicao2==-1))))
                flag1 = 1;
                auxPosicao1 = position;
                aux = position;
                view.setBackgroundResource(R.drawable.active_row);

            else if(auxPosicao1==position)
                       
                if (flag2 == 1)

                    aux = aux2;
                    auxPosicao1 = auxPosicao2;  

                    aux2 = -1;
                    flag2 =0;
                    auxPosicao2 =-1;

                else
                    aux = -1;
                    flag1=0;
                    auxPosicao1 =-1;

                
                view.setBackgroundResource(R.drawable.active_row2);

            else if(flag2 == 0 &&((auxPosicao2 == position || auxPosicao2 == -1)))
                aux2 = position;
                view.setBackgroundResource(R.drawable.active_row);
                flag2 = 1;
                auxPosicao2 = position;

            else if(position == auxPosicao2)
                aux2 = -1;
                flag2 =0;
                auxPosicao2 =-1;
                view.setBackgroundResource(R.drawable.active_row2);
            else
                Toast.makeText(getBaseContext(), "Coming soon ...", Toast.LENGTH_SHORT).show();
            
            //lastRow = view;
        
    );

... 我需要它来正确存储我的列表状态

【问题讨论】:

【参考方案1】:

android listview 重复使用相同的视图

所以当你为一个位置设置背景颜色时

您需要将背景颜色重置为其他位置的背景

【讨论】:

你能给我举个例子吗? 发布您的 listadapter 类

以上是关于当我向下滚动时,列表视图项目标记在列表下方的主要内容,如果未能解决你的问题,请参考以下文章

滚动时显示随机项目的getView

列表视图项目的不可预测的行为复选框单击

向上滚动时,Textview 重置为旧值

滚动列表视图时,还显示取消选择的图像

滚动自定义 ListView 时,复选框值发生变化

在回收站视图中滚动时,它向选定的复选框列表添加了一些其他值