学习笔记:ListView应用,分块右侧导航的简单分析

分步操作:

1.在ListView实现数据的显示(图片,text文本)

先得到ListView,然后构建适配器,最后关联适配器。

 

代码很简单

这里的关键是适配器的构建,这里我们是使用自己定义的适配器

 

这里包含了优化:convertView的重用,使我们不用每次都要创建Item,只需要创建屏幕中可以显示出来的Item,重用Item

                             ViewHolder类,自己定义了一个ViewHolder类,里面放Item中的View对象,(牺牲空间来得到优化)

                            City c=(City)getItem(position);得到position位置对应的数据

2.在1的基础上实现高亮显示

在ListView对象上添加监听器,重写onItemClick方法

在适配器中,得获得点击的是哪个Item,然后通过判断是否要高亮显示

3.既然高亮显示实现了,那么现在开始考虑如何让他做到分块,右侧导航?

a.先实现分块:分块就是把相同的类型的放入块,我们这里有在原来的基础上做了一下改进,又引入在City类中引入了一个作为块分类的属性,在得到数据时我们进行了排序

分块的布局也做了改进就是,我们又添加了一个TextView作为显示Item名的。如果Item中的Item名是他所属分类的第一个则显示,否则隐藏。

这里我们就需要找到,每个分类中的属性的第一个,通过代码

public int getPositionForSection(int section) {
for(int i=0;i<getCount();i++){
int sec=getSectionForPosition(i);
if(sec==section)return i;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ListView根据内容自动调整列宽可以让界面更加美观和易于使用。以下是实现的步骤: 1. 确定ListView的列数和列名。 2. 将ListView的View属性设置为GridView。 3. 为每个列设置一个HeaderTemplate,其中包含一个TextBlock控件。 4. 在ListView的Loaded事件中添加代码,使用ActualWidth属性设置每个列的宽度。 5. 在ListView的SizeChanged事件中添加代码,使用ActualWidth属性设置每个列的宽度。 下面是一个示例,演示如何在WPF中自动调整ListView列宽: ```xml <ListView ItemsSource="{Binding Items}" Loaded="ListView_Loaded" SizeChanged="ListView_SizeChanged"> <ListView.View> <GridView> <GridViewColumn Header="ID" Width="Auto"> <GridViewColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </GridViewColumn.HeaderTemplate> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding ID}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="Name" Width="Auto"> <GridViewColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </GridViewColumn.HeaderTemplate> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Name}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> <GridViewColumn Header="Age" Width="Auto"> <GridViewColumn.HeaderTemplate> <DataTemplate> <TextBlock Text="{Binding}" /> </DataTemplate> </GridViewColumn.HeaderTemplate> <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Age}" /> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn> </GridView> </ListView.View> </ListView> ``` ```csharp private void ListView_Loaded(object sender, RoutedEventArgs e) { var listView = sender as ListView; if (listView != null && listView.Items.Count > 0) { var gridView = listView.View as GridView; if (gridView != null) { double workingWidth = listView.ActualWidth - SystemParameters.VerticalScrollBarWidth; for (int i = 0; i < gridView.Columns.Count; i++) { gridView.Columns[i].Width = workingWidth / gridView.Columns.Count; } } } } private void ListView_SizeChanged(object sender, SizeChangedEventArgs e) { var listView = sender as ListView; if (listView != null && listView.Items.Count > 0) { var gridView = listView.View as GridView; if (gridView != null) { double workingWidth = listView.ActualWidth - SystemParameters.VerticalScrollBarWidth; for (int i = 0; i < gridView.Columns.Count; i++) { gridView.Columns[i].Width = workingWidth / gridView.Columns.Count; } } } } ``` 在这个示例中,我们创建了一个包含三列的ListView,每个列的宽度都设置为Auto。在ListView的Loaded和SizeChanged事件中,我们使用ActualWidth属性计算每个列的宽度,以便使列宽适合ListView的大小。当ListView的大小改变时,我们重新计算列宽。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值