`

ListView点击背景色更换(数据量大,显示小时会多选)

阅读更多

创建一个大小长度固定的dialog,当动态显示数据时,如果显示的数据太多,会出现同时选中多行的情况。

环境:自定义一个类,dialog中使用listview,不做分页处理,一次性全部显示出来。

点击事件代码如下:

GuestInfoListAdapter guestinfoAdapter = new GuestInfoListAdapter(guestInfoList);
        guestInfoListInfo.setAdapter(guestinfoAdapter);
        guestInfoListInfo.setOnItemClickListener(new OnItemClickListener() {
           
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                selectHaccnt = guestInfoList.get(arg2).getNo();
                arg1.setBackgroundColor(Color.BLUE);
               
                if(oldView != null && old_position != arg2){
                    oldView.setBackgroundColor(Color.TRANSPARENT);   
                }
                old_position = arg2;
                oldView = arg1;
            }
        });

 

注:old_position(Integer)和oldview(View)是全局变量

产用上面的方式来实现点击哪一行,哪一行变成蓝色。 但是如果是数据量比较大,滑动查看有两页以上。

那么点击任意一行,都会同时选中多行。

原因是:采用上面的方式,当点击了该行后,没有刷新整个adapter,导致后面的虚页也同时显示为选中状态。

解决方法:通过adapter来控制背景的变化,把点选中的行号传递给adapter,adapter的getView方法中做背景变更操作。

Dialog中:

final GuestInfoListAdapter guestinfoAdapter = new GuestInfoListAdapter(guestInfoList);
        guestInfoListInfo.setAdapter(guestinfoAdapter);
        guestInfoListInfo.setOnItemClickListener(new OnItemClickListener() {
           
            @Override
            public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                    long arg3) {
                // TODO Auto-generated method stub
                selectHaccnt = guestInfoList.get(arg2).getNo();
                guestinfoAdapter.setSelectedIndex(arg2);
                guestinfoAdapter.notifyDataSetInvalidated();
            }
        });

 

Adapter中:

先添加一个私有变量int型,书写其set方法。

private int selectedIndex = -1;
   
    public GuestInfoListAdapter(List<Guest> guestInfoList){
        this.guestInfoList = guestInfoList;
    }

    public void setSelectedIndex(int selectedIndex) {
        this.selectedIndex = selectedIndex;
    }

 

getView方法中,做背景变更:

if (position == selectedIndex){
            guestInfoListView.setBackgroundColor(Color.BLUE);
        }else
        {
            guestInfoListView.setBackgroundColor(Color.TRANSPARENT);
        }

 

 

 

分享到:
评论

相关推荐

    listview多选

    同时,多选模式下的视觉样式也应与普通模式有所区别,如背景色、字体颜色等。 通过以上步骤,我们可以实现一个功能完善的ListView多选功能。使用HashMap作为状态存储,不仅易于管理,还能有效避免因数据同步问题...

    最简洁代码实现Listview多选

    总之,实现ListView的多选并不复杂,关键在于正确设置ChoiceMode,处理点击和长按事件,以及保持选中状态与Adapter和数据源的一致性。通过这样的实践,开发者可以提高对Android UI组件和数据绑定的理解,提升应用的...

    实现对ListView的多选、长按和删除

    9. **异步操作**:如果数据量大,删除操作可能会阻塞UI线程,因此建议使用异步任务(如AsyncTask)来处理删除操作,确保界面流畅。 10. **安全处理**:在删除操作中,务必检查用户是否真的选中了项目,避免空指针...

    listview多选与单选模式demo

    3. 交互反馈:确保在用户点击列表项时,有适当的视觉反馈(如背景色变化或图标变化)来提示用户当前的选择状态。 4. 保存和恢复选择状态:如果应用需要在配置变更(如屏幕旋转)或退出再进入时保持选择状态,需要在...

    android list View多选

    - 为了提供良好的用户体验,当选中的项目应有明显的视觉反馈,例如背景色变化、CheckBox选中状态显示等。 - 这些效果可以通过设置Selector来实现,Selector是基于状态的Drawable,可以定义不同状态下View的外观。 ...

    安卓listview相关相关-实现列表多选的DEMO.zip

    5. **自定义Adapter**:如果DEMO中包含了自定义Adapter,那么可能需要重写`getView()`方法,以便在条目被选中时改变其外观,例如更改背景色或显示检查标记。 6. **额外功能**:除了基本的多选功能,DEMO可能还包含...

    listview多选demo

    7. **同步数据源**:当用户进行多选操作时,需要同步Adapter的数据源,确保ListView的显示与实际数据保持一致。这可能涉及到对数据模型的修改,比如添加一个isSelected字段,用来标记数据项是否被选中。 8. **视觉...

    ListView单选或多选

    4. 更新ListView的视觉效果,可以通过自定义列表项布局并在单击时改变背景色、图像等来实现。 **多选模式:** 1. 多选模式下,我们可以使用一个ArrayList或HashSet来存储已选中的位置,如`List&lt;Integer&gt; ...

    ListView选中item颜色改变

    同时,如果数据量大,考虑使用ViewHolder模式来减少findViewById的次数。 6. **适配Android版本差异** 考虑到Android系统的版本差异,对于API 11及以上版本,可以使用`setChoiceMode()`和`setItemChecked()`方法来...

    Android ListView多选.rar

    例如,如果一个列表项被选中,我们可以改变文字颜色或者背景色: ```xml android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@{item....

    ListView实现单选多选.zip

    - 使用Selector资源,可以在不同的状态下(如按下、选中、正常等)为ListView的项定义不同的背景色和形状。 11. **ListView的性能优化**: - 由于ListView可能包含大量数据,因此性能优化至关重要。这包括使用...

    ListView多选

    在这个方法中,我们可以处理每个列表项的显示状态,例如设置选中时的背景色。例如: ```java public class MyAdapter extends ArrayAdapter&lt;String&gt; { private List&lt;String&gt; items; private SparseBooleanArray ...

    自定义多选listview

    为了提供更好的用户体验,我们可能需要添加一些视觉效果,比如选中时的背景色变化、选中状态的高亮等。这可以通过设置自定义的Selector来实现。 5. **处理全选/全不选操作** 在多选模式下,通常会提供全选和全不...

    C# ListView使用例子ListView排列方式演示

    在C#编程中,ListView控件是一个非常常用的组件,它用于显示数据集合,并且提供了多种视图模式,如图标、小图标、详细信息等。在这个"C# ListView使用例子ListView排列方式演示"中,我们将深入探讨如何利用ListView...

    C#之ListView的最佳理解

    - **BackColor**和**ForeColor**:设置ListView的背景色和前景色。 - **CheckBoxes**属性:开启后,可以在ListView项前显示复选框,方便多选操作。 5. **性能优化** - **虚拟化(Virtualization)**:对于大量...

    不规则点击ListView案例

    在不规则点击案例中,Adapter可能需要根据点击状态更新View的显示,比如更改背景色、图标或文字。 10. **数据存储与恢复**:如果选中的条目需要在App重启后保持状态,那么需要将选中状态存储到SharedPreferences、...

    WPF ListView 漂亮样式

    例如,当鼠标悬停在列表项上时,可以改变其背景色: ```xml &lt;ListView.Resources&gt; &lt;Style TargetType="ListViewItem"&gt; (Background).(SolidColorBrush.Color)" To="LightBlue" Duration="0:0:0.3"/&gt; ...

    Android ListView使用技巧

    当数据量大时,一次性加载所有数据可能导致内存压力过大。可以采用异步加载策略,如LazyList,只在需要时加载部分数据,或者使用PullToRefresh和LoadMore结合,实现上拉刷新和下拉加载更多功能。 5. **列表项点击...

    Android ListView item 选中高亮显示

    如果需要更复杂的高亮效果,比如自定义背景色或者动画,可以使用StateListDrawable。StateListDrawable可以根据View的状态(如是否被选中)显示不同的图像资源。在XML中定义一个StateListDrawable,然后将其设置为...

    多选下拉列表和单选下拉列表

    - 对于多选,通常会有一个确认按钮,用户点击后,遍历Adapter的数据模型,获取所有选中的条目,然后进行相应的操作。 4. 注意事项: - 为了保证用户体验,应考虑在多选模式下添加清除所有选择的功能,可以通过...

Global site tag (gtag.js) - Google Analytics