Android学习心得第三课

今天学习了Android的一个重要的控件listview,最近的学习状态和前几天相比,下降的还是比较明显的,这里要给自己提一个醒,千里之行始于足下,后面一定要珍惜时间,戒骄戒躁。
下面来对listview进行一个总结,listview顾名思义是一个列表形式的控件,表现的形式如下图所示,这里采用的就是listview的形式来排列的。

这里写图片描述

要完成相应的视图可以用到两种适配器,分别是 ArrayAdapter 和SimpleAdapter这两种适配器,下面分别对这两种适配器进行讲解。

public class MainActivity extends Activity implements OnItemClickListener,OnScrollListener{
    private ListView lv;
    private ArrayAdapter<String> arr_adapter;
    private SimpleAdapter simadapter;
    private List<Map<String, Object>>datalist;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.listView);
        //1、新建一个适配器
        //2、ArrayAdapter的函数的第一个参数是上下文
        //3、第二个参数是当前的listview的每一个列表项所对应的布局文件                                                                                                                  
        //4、第三个参数是数据源
        String[] arr_data={"慕课网1","慕课网2","慕课网3","慕课网4"};
        arr_adapter = new ArrayAdapter<String>
        (this, android.R.layout.simple_list_item_1, arr_data);
        datalist = new ArrayList<Map<String,Object>>();

        //加载适配器  
        lv.setAdapter(arr_adapter);


    }
    private List<Map<String, Object>> getData(){
        for(int i=0;i<20;i++){
           //在datalist中插入数据

            Map<String, Object>map = new HashMap<String, Object>();
            map.put("pic",R.drawable.ic_launcher);
            map.put("text", "CCNU"+i);
            datalist.add(map);
        }
        return datalist;
    }

}


运用SimpleAdapter,代码如下:

public class MainActivity extends Activity implements OnItemClickListener,OnScrollListener{
    private ListView lv;
    private ArrayAdapter<String> arr_adapter;
    private SimpleAdapter simadapter;
    private List<Map<String, Object>>datalist;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.listView);

     /*
         * SimpleAdapter解析
         * 1、第一个参数是上下文
         * 2、第二个参数是数据源,data的形式是List<? extends Map<String, ?>> data
         *                 data必须是一个map组成的list集合
         *                 每一个map代表的是listview列表中的每一行 
         *                 每一个map(键-值)中的键必须包含所有在from中指定的键
         * 3、第三个参数是列表项的布局文件ID
         * 4、from:map中的键名
         * 5、to:绑定数据视图中的ID,与from成相对关系
         */
        datalist = new ArrayList<Map<String,Object>>();
        simadapter = new SimpleAdapter(this, getData(), R.layout.main, new String[]{"pic","text"}, new int[]{R.id.pic,R.id.text});
        //加载适配器 
        lv.setAdapter(simadapter);
        lv.setOnItemClickListener(this);
        lv.setOnScrollListener(this);

    }
    private List<Map<String, Object>> getData(){
        for(int i=0;i<20;i++){
            Map<String, Object>map = new HashMap<String, Object>();
            map.put("pic",R.drawable.ic_launcher);
            map.put("text", "CCNU"+i);
            datalist.add(map);
        }
        return datalist;
    }

    public void onScrollStateChanged(AbsListView view, int scrollState) {
       switch (scrollState) {
        case SCROLL_STATE_FLING:
            Log.i("main","手指在离开屏幕前,由于用力滑动了一下,导致视图仍旧依靠惯性滑动");
//这里为了实现下拉刷新功能,用map将新的数据加入进去
            Map<String, Object>map = new HashMap<String, Object>();
            map.put("pic", R.drawable.ic_launcher);
            map.put("text", "增加项");
            datalist.add(map);、
//这句话非常的重要,因为仅仅用map将数据加入进去是无法再页面上进行显示的,因为map仅仅会  实现后台上数据的一个增加,要想让UI界面同时进行一个刷新,就必须借助于notifyDataSetChanged函数来实现UI界面上的一个更新
            simadapter.notifyDataSetChanged();
            break;
           case SCROLL_STATE_IDLE:
            Log.i("main", "视图停止滑动");
             case SCROLL_STATE_TOUCH_SCROLL:
            Log.i("main", "手指没有离开屏幕,视图正在滑动");
            break;
        }
    }

    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // TODO Auto-generated method stub
        String text = lv.getItemAtPosition(position)+"";
          Toast.makeText(this,"position="+position+"text="+text,Toast.LENGTH_SHORT).show();
    }

}

最后在这里要特别提醒一下,我在编写程序犯了一个非常愚蠢的错误,setContentView(R.layout.activity_main)这句话被我写成了setContentView(R.layout.main);,main这个xml是我写的listview里面每一行的样式,而activity_main是包含listview的整个页面的布局,必须从这个页面启动,才能实现相应的效果。 simadapter = new SimpleAdapter(this, getData(), R.layout.main, new String[]{“pic”,”text”}, new int[]{R.id.pic,R.id.text});这句里面的R.layout.main这个参数就是告诉适配器listview里面的每一行的样式是用该main.xml下的样式。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值