Android学习笔记——ListView

ListView

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

【数据适配器】作用:把复杂的数据填充在指定的视图界面,是连接数据源和视图界面的桥梁

             分类:1.ArrayAdapter数组适配器:绑定格式单一的数据。数据源可以是集合或数组

                         2.SimpleAdapter简单适配器:用于绑定格式复杂的数据。数据源只能是特定泛型的集合

 

【实现过程:】新建适配器à添加数据源到适配器à视图加载适配器

________________________实践ArrayAdapter_____________________________

1.声明ListView,ArrayAdapter,SimpleAdapter。初始化listview控件

2.新建适配器。

     arr_adapter= new ArrayAdapter<String>(context,textViewResourceId,objects)

     ---context:上下文   this

     ---textViewResourceId:当前ListView加载的每一个列表项所对应的布局文件

     ---objects:数据源,要新建一个数组类型的数据块

3.添加数据源到适配器。

     数据源String[]arr_data={“aaa”,”bbb”,”ccc”,”ddd”};

则有:arr_adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,arr_data);

4.视图加载适配器。listView.setAdapter(arr_adapter);

________________________实践SimpleAdapter____________________________

2.新建适配器。

声明数据源Map: private List<Map<String,Object>> dataList;

simp_adapter=newSimpleAdapter(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对应

3.添加数据源到适配器。

数据源data:dataList = new ArrayList<Map<String,Object>>();

则有:simp_adapter=new SimpleAdapter(this,getData(),R.layout.item,newString[]{“pic”,”text1”,”text2”},new int[]{R.id.pic,R.id.text1,R.id.text2})

                       //pic,text1,text2是item.xml布局文件中的3个控件

写getData()方法:

private List<Map<String,Object>> getData(){

  for(int i=0;i<20;i++)//创建20条map(listview的一行)

     {Map<String,Object>map=newHashMap<String,Object>();

      map.put(“pic”,R.drawable.ic_launcher);

      map.put(“text1”,”Head_list”+i);//列表上要显示的文字

      map.put(“text2”,”Little_list”+i);

      datalist.add(map);

    }return datalist;

}

4.视图加载适配器。listView.setAdapter(simp_adapter);

 

监听ListView列表项点击事件

两种接口:ItemClickListener,ScrollListener

一:ItemClickListener监听单一事件

1.Activity继承两个接口:接口Activityimplements AdapterView.OnItemClickListener,AbsListView.OnScrollListener

记得写对应接口的实现方法:public void onItemClick(AdapterView<?> parent,Viewview,int position,long id){

    }

    public voidonScrollStateChanged(AbsListView view,int ScrollState){

}

public void onScroll(AbsListView view,intfirstVisibleItem,int visibleItemCount,int totalItemCount){

}

2.给listView设置两种监听器:listView.setOnItemClickListener(this),listView.setOnScrollListener(this)

3. public void onItemClick(AdapterView<?>parent,View view,int position,long id){

                    String text =listView.getItemAtPosition(position)+””;

                    Toast.makeText(this,”position=”+position+” text=”+text,Toast.LENGTH_SHORT).show();//点击一条list,以toast打印出提示信息

}

二:ScrollListener监听滚动事件

滚动事件的3种状态(int类型):1.SCROLL_STATE_FLING手指离开屏幕前用力滑动一下,视图由于惯性继续滑动

                                                      2.SCROLL_STATE_IDLE视图已经停止滑动

                                                      3.SCROLL_STATE_TOUCH_SCROLL手指没离开屏幕,视图正在滑动

将3种状态以switch case的形式写入onScrollStateChanged()

**下拉刷新:用力滑动之后刷新,增加新的信息。在SCROLL_STATE_FLING后追加Map<String,Object>map=new HashMap<String,Object>();

       map.put(“pic”,”R.drawable.ic_launcher”);

       map.put(“text1”,”增加项”);

       dataList.add(map);

      simple_adapter.notifyDataSetChanged();//重新通知刷新主界面,动态更新视图中所包含的数据

package com.example.administrator.listview_practice;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;


public class MainActivity extends Activity implements AdapterView.OnItemClickListener,AbsListView.OnScrollListener {
    private ListView listView;
    private ArrayAdapter
   
   
    
    arr_adapter;
    private SimpleAdapter simp_adapter;
    private List
    
    
     
     
      
      > dataList;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String[]arr_data={"aaa","bbb","ccc","ddd"};
        dataList = new ArrayList
      
      
       
       
         >(); listView = (ListView)findViewById(R.id.listView); arr_adapter = new ArrayAdapter 
        
          (this,android.R.layout.simple_list_item_1,arr_data); simp_adapter = new SimpleAdapter(this,getData(),R.layout.item,new String[]{"pic","text1","text2"},new int[]{R.id.pic,R.id.text1,R.id.text2 }); /*listView.setAdapter(arr_adapter);*/ listView.setAdapter(simp_adapter); listView.setOnItemClickListener(this); listView.setOnScrollListener(this); } private List 
          
          
            > getData(){ for (int i=0;i<20;i++){ Map 
           
             map=new HashMap 
            
              (); map.put("pic",R.drawable.ic_launcher); map.put("text1","Head_list"+i); map.put("text2","Little_list"+i); dataList.add(map); } return dataList; } @Override public void onItemClick(AdapterView 
              parent,View view,int position,long id){ String text = listView.getItemAtPosition(position)+""; Toast.makeText(this,"position="+position+" text="+text,Toast.LENGTH_SHORT).show(); } public void onScrollStateChanged(AbsListView view,int ScrollState){ switch (ScrollState){ case SCROLL_STATE_FLING: Log.i("main","用户在手指离开屏幕之前,用力滑了一下,视图仍由于惯性滑动"); Map 
             
               map=new HashMap 
              
                (); map.put("pic",R.drawable.ic_launcher); map.put("text1","增加项"); map.put("text2","副增加项"); dataList.add(map); simp_adapter.notifyDataSetChanged(); break; case SCROLL_STATE_IDLE: Log.i("main","视图已经停止滑动"); break; case SCROLL_STATE_TOUCH_SCROLL: Log.i("main","手指没离开屏幕,视图正在滑动"); } } public void onScroll(AbsListView view,int firstVisibleItem,int visibleItemCount,int totalItemCount){ } } 
               
              
             
            
           
         
       
     
     
   
   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值