Android layout 如何在滚动时保留listview选定/单击的项目颜色?

Android layout 如何在滚动时保留listview选定/单击的项目颜色?,android-layout,android-widget,android-listview,Android Layout,Android Widget,Android Listview,这真是一个奇怪的问题,我遇到了几个谷歌搜索结果都是徒劳的 我有一个列表视图,在该视图中,当用户单击项目时,所选项目的颜色应该更改 这篇文章帮助我更改列表视图所选项目的颜色。现在我可以在单击项目时更改颜色。但是如果我滚动列表视图,颜色就会跳出选择范围 如果选择了某个项目,例如第一行的listview项目,则最后一个项目也会被选中,同时滚动项目颜色会继续移动到我从未选择的项目 这是列表视图 <ListView android:id="@+id/loadedlist" an

这真是一个奇怪的问题,我遇到了几个谷歌搜索结果都是徒劳的

我有一个列表视图,在该视图中,当用户单击项目时,所选项目的颜色应该更改

这篇文章帮助我更改列表视图所选项目的颜色。现在我可以在单击项目时更改颜色。但是如果我滚动列表视图,颜色就会跳出选择范围

如果选择了某个项目,例如第一行的listview项目,则最后一个项目也会被选中,同时滚动项目颜色会继续移动到我从未选择的项目

这是列表视图

<ListView
     android:id="@+id/loadedlist"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_above="@+id/horizontalScroll"
     android:layout_alignParentLeft="true"
     android:layout_below="@+id/Title"
     android:layout_toLeftOf="@+id/sidepanel"
     android:scrollingCache="false">

    </ListView>

我使用数组适配器填充列表视图

<ListView
     android:id="@+id/loadedlist"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:layout_above="@+id/horizontalScroll"
     android:layout_alignParentLeft="true"
     android:layout_below="@+id/Title"
     android:layout_toLeftOf="@+id/sidepanel"
     android:scrollingCache="false">

    </ListView>
ringlist.setAdapter(新阵列适配器
(这是android.R.layout.simple_list_item_1,rings))

并使用列表视图的单击方法设置颜色

ringlist.setOnItemClickListener(new OnItemClickListener() {
     @Override
    public void onItemClick(AdapterView<?> parent, View view, int pos,long id) {
        // TODO Auto-generated method stub
    try{
    String con;
        String s =  ringlist.getItemAtPosition(pos).toString();
        con = s.toLowerCase();
    String selectedFromList = con;
            int resId = getResources().getIdentifier(selectedFromList, "raw",    
            "com.example.android");

            }
    if (row != null) {
            row.setBackgroundColor(Color.BLACK);
            }

           row = view;
               view.setBackgroundColor(Color.GREEN);
                }

       }  

        });
ringlist.setOnItemClickListener(新的OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父项、视图、整数位置、长id){
//TODO自动生成的方法存根
试一试{
字符串con;
字符串s=ringlist.getItemAtPosition(pos.toString();
con=s.toLowerCase();
字符串selectedFromList=con;
int resId=getResources().getIdentifier(从列表中选择“原始”,
“com.example.android”);
}
如果(行!=null){
行.背景色(颜色.黑色);
}
行=视图;
视图.setBackgroundColor(颜色.绿色);
}
}  
});
上面的代码完成了这项工作,但在滚动列表时出现了一些问题


请注意。

这是android中Listview的常见问题。 当我们在向下或向上滚动后在Listview项目中使用复选框/单选按钮时,所选位置在某些不同的位置会发生更改。 到目前为止,唯一的解决方案是,我们需要在arraylist(或任何您认为合适的结构)中保持选定的位置。 当您向上/向下滚动列表视图时,会调用getview。 因此,在getview()中编写代码,使复选框项从arraylist中选中。
也不要在getview中为convertview使用if-else条件。

将单击/选定的位置存储在onItemClick()方法的集合或数组中。编写代码,使用存储的位置在适配器的getview()方法中显示单击/选定的项