创建一个大小长度固定的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多选功能。使用HashMap作为状态存储,不仅易于管理,还能有效避免因数据同步问题...
总之,实现ListView的多选并不复杂,关键在于正确设置ChoiceMode,处理点击和长按事件,以及保持选中状态与Adapter和数据源的一致性。通过这样的实践,开发者可以提高对Android UI组件和数据绑定的理解,提升应用的...
9. **异步操作**:如果数据量大,删除操作可能会阻塞UI线程,因此建议使用异步任务(如AsyncTask)来处理删除操作,确保界面流畅。 10. **安全处理**:在删除操作中,务必检查用户是否真的选中了项目,避免空指针...
3. 交互反馈:确保在用户点击列表项时,有适当的视觉反馈(如背景色变化或图标变化)来提示用户当前的选择状态。 4. 保存和恢复选择状态:如果应用需要在配置变更(如屏幕旋转)或退出再进入时保持选择状态,需要在...
- 为了提供良好的用户体验,当选中的项目应有明显的视觉反馈,例如背景色变化、CheckBox选中状态显示等。 - 这些效果可以通过设置Selector来实现,Selector是基于状态的Drawable,可以定义不同状态下View的外观。 ...
5. **自定义Adapter**:如果DEMO中包含了自定义Adapter,那么可能需要重写`getView()`方法,以便在条目被选中时改变其外观,例如更改背景色或显示检查标记。 6. **额外功能**:除了基本的多选功能,DEMO可能还包含...
7. **同步数据源**:当用户进行多选操作时,需要同步Adapter的数据源,确保ListView的显示与实际数据保持一致。这可能涉及到对数据模型的修改,比如添加一个isSelected字段,用来标记数据项是否被选中。 8. **视觉...
4. 更新ListView的视觉效果,可以通过自定义列表项布局并在单击时改变背景色、图像等来实现。 **多选模式:** 1. 多选模式下,我们可以使用一个ArrayList或HashSet来存储已选中的位置,如`List<Integer> ...
同时,如果数据量大,考虑使用ViewHolder模式来减少findViewById的次数。 6. **适配Android版本差异** 考虑到Android系统的版本差异,对于API 11及以上版本,可以使用`setChoiceMode()`和`setItemChecked()`方法来...
例如,如果一个列表项被选中,我们可以改变文字颜色或者背景色: ```xml android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="@{item....
- 使用Selector资源,可以在不同的状态下(如按下、选中、正常等)为ListView的项定义不同的背景色和形状。 11. **ListView的性能优化**: - 由于ListView可能包含大量数据,因此性能优化至关重要。这包括使用...
在这个方法中,我们可以处理每个列表项的显示状态,例如设置选中时的背景色。例如: ```java public class MyAdapter extends ArrayAdapter<String> { private List<String> items; private SparseBooleanArray ...
为了提供更好的用户体验,我们可能需要添加一些视觉效果,比如选中时的背景色变化、选中状态的高亮等。这可以通过设置自定义的Selector来实现。 5. **处理全选/全不选操作** 在多选模式下,通常会提供全选和全不...
在C#编程中,ListView控件是一个非常常用的组件,它用于显示数据集合,并且提供了多种视图模式,如图标、小图标、详细信息等。在这个"C# ListView使用例子ListView排列方式演示"中,我们将深入探讨如何利用ListView...
- **BackColor**和**ForeColor**:设置ListView的背景色和前景色。 - **CheckBoxes**属性:开启后,可以在ListView项前显示复选框,方便多选操作。 5. **性能优化** - **虚拟化(Virtualization)**:对于大量...
在不规则点击案例中,Adapter可能需要根据点击状态更新View的显示,比如更改背景色、图标或文字。 10. **数据存储与恢复**:如果选中的条目需要在App重启后保持状态,那么需要将选中状态存储到SharedPreferences、...
例如,当鼠标悬停在列表项上时,可以改变其背景色: ```xml <ListView.Resources> <Style TargetType="ListViewItem"> (Background).(SolidColorBrush.Color)" To="LightBlue" Duration="0:0:0.3"/> ...
当数据量大时,一次性加载所有数据可能导致内存压力过大。可以采用异步加载策略,如LazyList,只在需要时加载部分数据,或者使用PullToRefresh和LoadMore结合,实现上拉刷新和下拉加载更多功能。 5. **列表项点击...
如果需要更复杂的高亮效果,比如自定义背景色或者动画,可以使用StateListDrawable。StateListDrawable可以根据View的状态(如是否被选中)显示不同的图像资源。在XML中定义一个StateListDrawable,然后将其设置为...
- 对于多选,通常会有一个确认按钮,用户点击后,遍历Adapter的数据模型,获取所有选中的条目,然后进行相应的操作。 4. 注意事项: - 为了保证用户体验,应考虑在多选模式下添加清除所有选择的功能,可以通过...