• Android攻城狮ListView


    适配器:

    数据适配器:把复杂的数据填充在指定的视图界面上
    
    ArrayAdapter  数组适配器  用于绑定格式单一的数据
    数据源:可以是集合或数组  
    
    SimpleAdapter  简单适配器:用于绑定格式复杂的数据
    数据源:只能是特定泛型的集合
    
    数据适配器是连接数据源和视图界面的桥梁
    
    使用过程:新建适配器->添加数据源到适配器->视图加载适配器


    ListView中 “ArrayAdapter”的使用方法
    
    1.新建listview和 ArrayAdapter
    2.设置数据源,使用String[]即可,(也可以使用其他的,只要有对应的构造函数就行)
    3.实例化ArrayAdapter,具有很多构造函数。(一般第一个Context为上下文,resouce为数据源,即布局界面。最后一个数据源)
    4.为listView设置Adapter.  listView.setAdapter(arrAdapter);
     1 public class MainActivity extends AppCompatActivity {
     2     private ListView listView;
     3     private ArrayAdapter<String>arr_adapter;//适配器
     4     @Override
     5     protected void onCreate(Bundle savedInstanceState) {
     6         super.onCreate(savedInstanceState);
     7         setContentView(R.layout.activity_main);
     8         listView=(ListView)findViewById(R.id.listView);
     9         //一,新建一个适配器
    10         //三个参数
    11         //1,上下文
    12         //2,当前listview加载的每一个列表项所对应的布局文件
    13         //3,数据源
    14         // 二,适配器加载数据源
    15         String[] arr_data={"mukewang1","mukewang1","mukewang1","mukewang1"};
    16         arr_adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr_data);
    17         //三,视图(ListView)加载适配器
    18         listView.setAdapter(arr_adapter);
    19     }
    20 }
    SimpleAdapter( context, data , resource , from ,to ):
    context:上下文
    data:数据源(List<? extends Map<String,?>> data)一个由Map组成的List合集
    	每一个Map都对应ListView列表中的一行
    	每一个Map(键-值对)中的键都必须包含所有在from中所指定的键
    resource:列表项的布局文件ID
    from:Map中的键名
    to:绑定数据视图中的ID,与from成对应关系。
    
    例如:sim_adapter=new SimpleAdapter(this,getData(),R.layout.item , new String[]{"pic","text"} ,new int[]{R.id.pic,R.id.text});  这里的数据源比较麻烦,先自定义一个获取数据源的方法getdata(),然后在这里调用它。
    另外,R.layout.item也是自建的,包含一个ImageButton(编号R.id.pic)和一个 Button(编号R.id.text),这些编号也是数据视图中的ID

    监听器
    MainActivity实现接口OnItemClickListener,OnScrollListener。
    然后给ListView加载这些监听器:
    listView.setOnItemClickListener(this); 单个条目的监听器
    listView.OnScrollListener(this); ListView视图滚动监听器
    最后,重写OnItemClick():
    @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //position就是点击的位置
            String text = listView.getItemAtPosition(position)+"";//获取被点击的列表项的信息
            Toast.makeText(this, "点击的位置:"+text+" position="+position, Toast.LENGTH_SHORT).show();
        }
    运行效果:点击任意一个列表项,就会跳出该列表项的信息提示


    1. 实现接口OnScrollListener (android.widget.AbsListView.OnScrollListener) 这个包下的
    2. 其中包括两个方法
       public void onScrollStateChanged(AbsListView view, int scrollState)
       scrollState代表当前滚动的状态
       public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
    3. 滚动有三种状态
       SCROLL_STATE_TOUCH_SCROLL 当手指接触屏幕时,为该状态
       SCROLL_STATE_FLING   手指离开屏幕,但是滑动为停止
       SCROLL_STATE_IDLE   滑动停止
     1     public void onScrollStateChanged(AbsListView view, int scrollState) {
     2         // TODO Auto-generated method stub
     3         switch (scrollState) {
     4         case SCROLL_STATE_FLING:
     5             Log.i("------》》 SCROLL_STATE_FLING", "用户在手指离开屏幕之前,由于用力划了一下,视图仍然靠惯性继续滑动");
     6             Map<String, Object> map = new HashMap<String, Object>();
     7             map.put("pic", R.drawable.ic_launcher);
     8             map.put("text", "增加项");
     9             datalist.add(map);
    10             simpleadapter.notifyDataSetChanged();
    11             break;
    12             
    13         case SCROLL_STATE_IDLE:
    14             Log.i("---->>SCROLL_STATE_IDLE", "视图已经停止滑动");
    15             break;
    16 
    17         case SCROLL_STATE_TOUCH_SCROLL:
    18             Log.i("------》》SCROLL_STATE_TOUCH_SCROLL", "手指没有离开屏幕,视图正在滑动");
    19             break;
    20         }
    21     }

     完整代码:

     1 //两种适配器ArrayAdapter和SimpleAdapter
     2 
     3 //两种监听方式
     4 //listView.setOnItemClickListener(this); 单个条目的监听器
     5 //listView.OnScrollListener(this); ListView视图滚动监听器
     6 
     7 //类似下拉刷新的小案例
     8 public class MainActivity extends Activity implements OnItemClickListener,
     9         OnScrollListener {
    10     private ListView listView;
    11     private ArrayAdapter<String> arr_adapter;
    12 
    13     private SimpleAdapter simp_adapter;
    14     List<Map<String, Object>> dataList;
    15 
    16     @Override
    17     protected void onCreate(Bundle savedInstanceState) {
    18         super.onCreate(savedInstanceState);
    19         setContentView(R.layout.fragment_main);
    20         listView = (ListView) findViewById(R.id.listView1);
    21         // 1.新建一个适配器
    22         String[] arr_data = { "小白菜1", "小白菜2", "小白菜3" };
    23         arr_adapter = new ArrayAdapter<String>(this,
    24                 android.R.layout.simple_list_item_1, arr_data);
    25         // 2.适配器加载数据源
    26         // 3.加载适配器
    27         // listView.setAdapter(arr_adapter);
    28         // -------------------SimpleAdapter------------------------
    29         // data:数据源List<? extends Map<String, ?>> data 一个Map所组成的List集合
    30         // 每一个Map都会去对应Listview列表中的一行
    31         // 每个Map(键值对)中的键必须包含所有在from中所指定的键
    32         // resource:列表项的布局文件
    33         // from: map中的键名
    34         // to:绑定数据视图中的id 与from对应(布局中的控件)
    35 
    36         dataList = new ArrayList<Map<String, Object>>();
    37         simp_adapter = new SimpleAdapter(this, getData(), R.layout.item,
    38                 new String[] { "pic", "text" },
    39                 new int[] { R.id.pic, R.id.text });
    40         listView.setAdapter(simp_adapter);
    41         listView.setOnItemClickListener(this);
    42         listView.setOnScrollListener(this);
    43     }
    44 
    45     public List<Map<String, Object>> getData() {
    46         for (int i = 0; i < 20; i++) {
    47             Map<String, Object> map = new HashMap<String, Object>();
    48             map.put("pic", R.drawable.ic_launcher);
    49             map.put("text", "小菠菜" + i);
    50             dataList.add(map);
    51         }
    52 
    53         return dataList;
    54 
    55     }
    56 
    57     @Override
    58     public void onScrollStateChanged(AbsListView view, int scrollState) {
    59         // TODO Auto-generated method stub
    60         switch (scrollState) {
    61         case SCROLL_STATE_FLING:
    62             // 类似下拉刷新的小案例
    63             Log.i("---->>", "用户在手指离开屏幕之前,由于用力滑了一下,视图仍依靠惯性滑动");
    64             Map<String, Object> map = new HashMap<String, Object>();
    65             map.put("pic", R.drawable.ic_launcher);
    66             map.put("text", "我是多余的增加项");
    67             dataList.add(map);
    68             simp_adapter.notifyDataSetChanged();// 通知线程更新UI
    69             break;
    70         case SCROLL_STATE_IDLE:
    71             Log.i("---->>", "视图已经停止滑动");
    72             break;
    73         case SCROLL_STATE_TOUCH_SCROLL:
    74             Log.i("---->>", "视图正在滑动,手指没有移开屏幕");
    75             break;
    76         }
    77     }
    78 
    79     @Override
    80     public void onScroll(AbsListView view, int firstVisibleItem,
    81             int visibleItemCount, int totalItemCount) {
    82         // TODO Auto-generated method stub
    83 
    84     }
    85 
    86     @Override
    87     public void onItemClick(AdapterView<?> parent, View view, int position,
    88             long id) {
    89         // TODO Auto-generated method stub
    90         String text = listView.getItemAtPosition(position) + "";
    91         Toast.makeText(MainActivity.this,
    92                 "position=" + position + "text=" + text, 0).show();
    93     }
    94 
    95 }























  • 相关阅读:
    centos7安装rlwrap
    Linux CentOS 7的图形界面安装(GNOME、KDE等)
    在oracle下我们如何正确的执行数据库恢复
    Viewer.js 图片预览插件使用
    深拷贝和浅拷贝
    ES6 export,import报错
    Yarn 命令详解
    npm命令 VS yarn命令
    Windows下nginx作为静态资源服务器使用
    关于Vue脚手架写法的问题
  • 原文地址:https://www.cnblogs.com/my334420/p/6696663.html
Copyright © 2020-2023  润新知