安卓学习笔记(一) 用适配器适配ListView和ArrayList——安卓第二天

列表的显示需要三个元素:

1.ListVeiw 用来展示列表的View。

2.适配器 用来把数据映射到ListView上的中介。

3.数据    具体的将被映射的字符串,图片,或者基本组件。


destination制作listview


question1为什么要适配器?

answer1:ListView是一连串的“条子”,但是在布局的时候无法确定要布局几个条子,所以只写一个ListView。之后用适配器让每个数据都对应一个条子出来。


根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapterSimpleCursorAdapter

其中以ArrayAdapter最为简单,只能展示一行字。SimpleAdapter有最好的扩充性,可以自定义出各种效果。SimpleCursorAdapter可以认为

SimpleAdapter对数据库的简单结合,可以方面的把数据库的内容以列表的形式展示出来。


数据库还没看先不管SimpleCursorAdapterArrayAdapter比较弱,也不说了,下面只说SimpleAdapter.


分成三步走:

第一步:造数据

这个怎么个造法根据需求来,最后存入一个像ArrayList>的东西里去。

第二步:适配器上场

        SimpleAdapter mSchedule = new SimpleAdapter(context, //activity的context
        		                                    getlist(intinum),//数据来源 ,第一步造出来的数据
        		                                    R.layout.my_listitem,//ListItem的XML实现,对应一下布局
        		                                    new String[] {"ItemTitle", "ItemText"},//动态数组与ListItem对应的子项
							   new int[] {R.id.linearText1,R.id.linearText2});//ListItem的XML文件里面的两个TextView ID

这样理解:从数据里找到String[]的一个对应项,得到真正要显示的数据,

显示在哪里呢?显示在new int[]的那两个地方。

显示在哪个ListView里呢?去R.layout.XX那里去找。

最后放在context对应的activity里。

第三步

//添加并且显示
        list.setAdapter(mSchedule);



讲完了,周末大放送,学长说BaseAdapter也很好用,我还不清楚它和前几个的关系。用起来有个不同。

-----------

今天看博文,好像和其他Adapter也是一个并列的关系      ——140718更新

-----------

三步走

第一步:找个类继承BaseAdapter 和 造数据(这个不用说和上面一样)

成了这个样子

class a extends BaseAdapter{

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int arg0, View arg1, ViewGroup arg2) {
		// TODO Auto-generated method stub
		return null;
	}
	
}
其中我们主要要写 getCount()getView这两个方法。

getCount得到数据数目。getView得到每一“条”的样子

第二步:适配器上场

public View getView(int position, View convertView, ViewGroup parent) {
			


			LayoutInflater mInflater = LayoutInflater.from(context);
			ViewHolder holder = null;//这里是一窝蜂绑定
			if (convertView == null) {
				
				holder=new ViewHolder();  
				
				convertView = mInflater.inflate(R.layout.vlist2, null);
				holder.img = (ImageView)convertView.findViewById(R.id.img);
				holder.title = (TextView)convertView.findViewById(R.id.title);
				holder.info = (TextView)convertView.findViewById(R.id.info);
				holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
				convertView.setTag(holder);
				
			}else {
				
				holder = (ViewHolder)convertView.getTag();
			}
			
			//这里是把数据送到绑定好的地方
			holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
			holder.title.setText((String)mData.get(position).get("title"));
			holder.info.setText((String)mData.get(position).get("info"));
			
			holder.viewBtn.setOnClickListener(new View.OnClickListener() {
				
				@Override
				public void onClick(View v) {
					showInfo();					
				}
			});
			
			
			return convertView;//大功告成,得到一条,他就是这样一条一条绘制出来的
		}
	


	class ViewHolder {
		ImageView img_ObjImg;
		TextView txtVw_ObjName;
		TextView txtVw_ObjNameContent;
		TextView txtVw_ObjDescribe;
	}
}

第三步:添加并且显示        

list.setAdapter(mSchedule);在“主”类中写MyAdapter adapter = new MyAdapter(context);
setListAdapter(adapter);

一瞬间adapter把所有事情都搞定了。


列表项的一个例子

  
  
  
  
      
  
      
  
          
  
              
  
              
          
  
          
      
  
  



下面是一些关于ListView的tip:

1.如果要曾加或减少条子的数量,直接改数据就好了,然后adapter.notifydatasetchanged(),就自动重新绘制更新。

2.ListView也可以设置监听,类似微信聊天的整个条子的监听。   参阅 这个函数:onItemClick()

你可能感兴趣的:(安卓学习笔记)