zoukankan      html  css  js  c++  java
  • Android初级开发第八讲ListView学习以及特性介绍


    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved !


    一般,安卓程序中要实现列表数据会用到ListView和GridView,相似度很高,今天主要拿前者来讲述。

    咱们先看代码

    private List<Object> data;
    	private Context context;
    	private ListView listview;
    	private MyAdapter adapter;
    
    	@Override
    	public void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);// 布局文件
    		// 初始化listview data等变量
    		adapter = new MyAdapter();
    		listview.setAdapter(adapter);
    		listview.setOnItemClickListener(new OnItemClickListener() {
    
    			@Override
    			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
    					long arg3) {
    				// TODO Auto-generated method stub
    				Object obj=data.get(arg2);
    			}
    		});
    	}
    
    	@Override
    	protected void onResume() {
    		// TODO Auto-generated method stub
    		super.onResume();
    		adapter.notifyDataSetChanged();
    	}
    
    	class MyAdapter extends BaseAdapter {
    		class ViewHolder {
    			private TextView t1, t2, t3, t4;
    		}
    
    		@Override
    		public int getCount() {
    			return data.size();
    		}
    
    		@Override
    		public Object getItem(int position) {
    			return position;
    		}
    
    		@Override
    		public long getItemId(int position) {
    			return position;
    		}
    
    		@Override
    		public View getView(int position, View convertView, ViewGroup parent) {
    			ViewHolder holder;
    			if (convertView == null) {
    				convertView = LayoutInflater.from(context).inflate(
    						R.layout.listitem, null);
    				holder = new ViewHolder();
    				// 初始化holder.t1,t2,t3,t4
    				convertView.setTag(holder);
    			}
    			// 给holder.t1,t2,t3,t4赋值
    			return convertView;
    		}
    	}

    首先,ListView对象在xml文件中声明,并在onCreate方法中初始化获得listview,给listview加载数据

    有这么几点大家会注意到:

    1、adapter我写了一个内部类,继承自BaseAdapter,这样的好处在于data数据不用再传递,在刷新页面时直接用adapter.notifyDataSetChanged()方法就可以刷新界面,减少重新声明adapter的次数,减少内在消耗。
    2、在适配器的getView方法中,我没有重新声明一个View,而是用的convertView,这样的好处是当加载的数据过多,如一万条时仍然不会卡。

    3、使用自定义的一个ViewHolder,好处在于不用每次都给t1,t2,t3,t4初始化,减少内存消耗。

    4、最常用setOnItemClickListener,注意arg2表示数据的下坐标,传递的对象要序列化(下节讲述)

    使用listview差不多就需要注意到这么多。


    另外listview有一些特性

    比如

    1、让listview下面那条横线消失呢:只需要加上这一句,listView.setDividerHeight(0);

    2、如何让listview进入就显示最后几条(默认最前)呢?可以设置属性android:stackFromBottom="true"

    3、隐藏listView的滚动条, android:scrollbars="none"

    4、自动滚动,同时设置android:stackFromBottom="true" android:transcriptMode="alwaysScroll" 

    5、实现一个单/复选框效果,  listView.setItemsCanFocus(false);  listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);/  listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);


    今天先说到这里!谢谢!

  • 相关阅读:
    完数
    自定义的allocator
    成绩的处理
    R语言-线性回归(1)
    R语言-朴素贝叶斯分类器(1)
    R语言控制流
    leetcode Two sum
    数据库环境搭建
    表单验证制作注册页面
    表单验证
  • 原文地址:https://www.cnblogs.com/fengju/p/6174506.html
Copyright © 2011-2022 走看看