学习笔记ListView初识

  1.ListView的基本使用

作用:android系统中显示列表的控件

  2.两种适配器(ArrayAdapter、simpleAdapter)

数据适配器 是连接数据源和视图界面的桥梁
作用:把复杂的数据(数组、链表、数据库、集合等)填充到指定视图界面上

ArrayAdapter:用于绑定格式单一数据
数据源:集合或者数组
SimpleAdapter:用于绑定格式复杂的数据
数据源:只能是特定泛型的集合
实现过程:新建适配器->添加数据源到适配器->视图加载适配器

使用ArrayAdapter:

package com.drumbass.listviewtest;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity1 extends Activity {
    private ListView listView;
    private ArrayAdapter<String> mArrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        listView = (ListView) findViewById(R.id.listView1);
        String mdata[] = { "DrumBass1", "DrumBass2", "DrumBass3", "DrumBass4",
                "DrumBass5" };
        mArrayAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, mdata);
        listView.setAdapter(mArrayAdapter);

    }

}

使用simpleAdapter:

 1 package com.drumbass.listviewtest;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import android.app.Activity;
 9 import android.os.Bundle;
10 import android.widget.ListView;
11 import android.widget.SimpleAdapter;
12 
13 public class MainActivity2 extends Activity {
14     private ListView listView;
15     private SimpleAdapter mSimpleAdapter;
16     private List<Map<String, Object>> mDataList;
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22         listView = (ListView) findViewById(R.id.listView1);
23         mDataList = new ArrayList<Map<String, Object>>();
24         mSimpleAdapter = new SimpleAdapter(this, getData(), R.layout.item,
25                 new String[] { "pic", "text" },
26                 new int[] { R.id.pic, R.id.text });
27         listView.setAdapter(mSimpleAdapter);
28     }
29     private List<Map<String, Object>> getData(){
30         for (int i = 0; i < 20; i++) {
31             Map<String,Object> map = new HashMap<String,Object>();
32             map.put("pic", R.drawable.ic_launcher);
33             map.put("text", "DrumBass"+i);
34             mDataList.add(map);
35         }
36         return mDataList;
37     }
38 
39 }

自定义xml文件:item.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout 
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:orientation="horizontal" >
 7     <ImageView
 8         android:layout_height="wrap_content"
 9         android:layout_width="wrap_content"
10         android:src="@drawable/ic_launcher"
11         android:id="@+id/pic"
12         />
13     <TextView 
14         android:id="@+id/text"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:text="DrumBass"
18         android:gravity="center"
19         />
20 
21 </LinearLayout>

运行结果:

  3.两种监听器(OnScrollingListener、OnItemClickListener)

  4.适配器数据刷新(notifyDataChanged)

 1 package com.drumbass.listviewtest;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import android.app.Activity;
 9 import android.os.Bundle;
10 import android.util.Log;
11 import android.view.View;
12 import android.widget.AbsListView;
13 import android.widget.AbsListView.OnScrollListener;
14 import android.widget.AdapterView;
15 import android.widget.AdapterView.OnItemClickListener;
16 import android.widget.ListView;
17 import android.widget.SimpleAdapter;
18 import android.widget.Toast;
19 
20 public class MainActivity2 extends Activity implements OnItemClickListener,
21         OnScrollListener {
22     private ListView listView;
23     private SimpleAdapter mSimpleAdapter;
24     private List<Map<String, Object>> mDataList;
25 
26     @Override
27     protected void onCreate(Bundle savedInstanceState) {
28         super.onCreate(savedInstanceState);
29         setContentView(R.layout.activity_main);
30         listView = (ListView) findViewById(R.id.listView1);
31         mDataList = new ArrayList<Map<String, Object>>();
32         mSimpleAdapter = new SimpleAdapter(this, getData(), R.layout.item,
33                 new String[] { "pic", "text" },
34                 new int[] { R.id.pic, R.id.text });
35         listView.setAdapter(mSimpleAdapter);
36         listView.setOnItemClickListener(this);
37         listView.setOnScrollListener(this);
38     }
39 
40     private List<Map<String, Object>> getData() {
41         for (int i = 0; i < 20; i++) {
42             Map<String, Object> map = new HashMap<String, Object>();
43             map.put("pic", R.drawable.ic_launcher);
44             map.put("text", "DrumBass" + i);
45             mDataList.add(map);
46         }
47         return mDataList;
48     }
49 
50     @Override
51     public void onScrollStateChanged(AbsListView view, int scrollState) {
52         switch (scrollState) {
53         case SCROLL_STATE_FLING:
54             Log.i("Main", "用户在手指离开之前,用力滑动,视图还在滚动");
55             Map<String, Object> map = new HashMap<String, Object>();
56             map.put("pic", R.drawable.ic_launcher);
57             map.put("text", "TR");
58             mDataList.add(map);
59             mSimpleAdapter.notifyDataSetChanged();
60             break;
61         case SCROLL_STATE_IDLE:
62             Log.i("Main", "视图停止滑动");
63             break;
64         case SCROLL_STATE_TOUCH_SCROLL:
65             Log.i("Main", "视图在滚动");
66             break;
67         }
68     }
69 
70     @Override
71     public void onScroll(AbsListView view, int firstVisibleItem,
72             int visibleItemCount, int totalItemCount) {
73 
74     }
75 
76     @Override
77     public void onItemClick(AdapterView<?> parent, View view, int position,
78             long id) {
79         String text = listView.getItemAtPosition(position) + "";
80         Toast.makeText(this, "position" + position + "text" + text,
81                 Toast.LENGTH_SHORT).show();
82     }
83 
84 }

 


 

 

终于写完了,虽然都只是笔记,但是花了很多时间。也许是我的学习方法错了? 是不是应该学完后练练再来写? 那样也许效率会高很多,下次试试。
 

 

转载于:https://www.cnblogs.com/DrumBass/p/4209098.html

  • 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、付费专栏及课程。

余额充值