Android学习第四天————ListView用BaseAdapter适配器来填充数据

  • Post author:
  • Post category:其他



一、BastAdapter适配器获得数据,用来填充ListView组件


1、通过XML文件来创建ListView组件


示例代码


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.niit.androidfourday.MainActivity" >
	<ListView 
	    android:id="@+id/listview"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    ></ListView>

</RelativeLayout>

2、通过XML 文件来创建需要在ListView组件中显示的组件


示例代码


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linear"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView 
        android:id="@+id/img"
        android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
        />
	<TextView 
	    android:id="@+id/text"
	    android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
	    />
	<Button 
	    android:id="@+id/button"
	    android:layout_width="wrap_content"
    	android:layout_height="wrap_content"
	    />
</LinearLayout>

以上代码创建了一个图片View和文本View和一个按钮




3、


BastAdapter是一个抽象类,因此必须用子类去继承BastAdapter类,然后去重写里面的方法


示例代码


定义一个类在其中定义上面在XML文件中添加的三个组件


private class MyViewGroup{
    	private ImageView imageView;
    	private TextView textView;
    	private Button button;
    }

定义一个方法用来获得需要放置在组件中的数据


public ArrayList<Map<String, Object>> getArrayList(){
    	ArrayList<Map<String, Object>> arrayList=new ArrayList<Map<String,Object>>();//声明一个集合用来存储组件信息
    	Map<String, Object> map=new HashMap<String, Object>();//声明一个map来存放一组组件信息
    	map.put("image", R.drawable.tu2);//将图片信息放到map中
    	map.put("text", "图片");//将文本信息放到map中
    	map.put("button", "查看");//将按钮信息放到map中
    	arrayList.add(map);//将该map放到集合中
    	
    	map=new HashMap<String, Object>();
    	map.put("image", R.drawable.tu3);
    	map.put("text", "图片");
    	map.put("button", "查看");
    	arrayList.add(map);
    	
    	return arrayList;//返回多组组件信息
    }

MyAdapter2继承BaseAdapter重写其方法


private class MyAdapter2 extends BaseAdapter{
    	//获得列表项的个数
    	@Override
    	public int getCount() {
    		// TODO Auto-generated method stub
    		return getArrayList().size();
    	}
    	//返回某一个列表项
    	@Override
    	public Object getItem(int position) {
    	// TODO Auto-generated method stub
    		return null;
    	}
    	//得到列表项的ID
    	@Override
    	public long getItemId(int position) {
    		// TODO Auto-generated method stub
    		return 0;
    	}
    	//返回列表项的组件
    	@Override
    	public View getView(final int position, View convertView, ViewGroup parent) {
    		MyViewGroup myViewGroup=null;
    		//将list_view_group布局文件转换成view组件,因为R.layout.list_view_group不在当前的Activity中因此需要//将其转化成一个view组件才能获得其中的组件
    		if(convertView==null){
    			convertView=LayoutInflater.from(MainActivity.this).inflate(R.layout.list_view_group, null);
        		myViewGroup=new MyViewGroup();
        		myViewGroup.imageView=(ImageView)convertView.findViewById(R.id.img);//获取布局文件中的imageView组件
        		myViewGroup.textView=(TextView)convertView.findViewById(R.id.text);
        		myViewGroup.button=(Button)convertView.findViewById(R.id.button);
        		convertView.setTag(myViewGroup);//将自定义的一组组件对象放置到view中
    		}else{
    			myViewGroup=(MyViewGroup) convertView.getTag();//得到view中的自定义组件对象
    		}
    		myViewGroup.imageView.setImageResource((Integer) getArrayList().get(position).get("image"));
    		myViewGroup.textView.setText(getArrayList().get(position).get("text").toString());
    		myViewGroup.button.setText(getArrayList().get(position).get("button").toString());
    		myViewGroup.button.setOnClickListener(new OnClickListener() {
				
		@Override
		public void onClick(View v) {//单击鼠标事件
			// TODO Auto-generated method stub
			Toast.makeText(MainActivity.this, "第"+position+"被点击", Toast.LENGTH_SHORT).show();
					
				}
			});
    		return convertView;
    	}
    }


public int getCount()//方法是用来获得适配器中的数据的条数<pre name="code" class="java"><span style="font-family: Arial, Helvetica, sans-serif;">public Object getItem(int position)//是用来获得当前选中的对象</span>


<pre name="code" class="java"><pre name="code" class="java">public long getItemId(int position)//用来获得当前选中的记录的标号
<pre name="code" class="java">public View getView(final int position, View convertView, ViewGroup parent)//用来返回一组组件




最后在OnCreate()中获得显示的ListView并将适配器里的内容给他


ListView listView=(ListView)findViewById(R.id.listview);
        listView.setAdapter(new myAdapter());

至此通过BaseAdapter适配器来在ListView中显示数据的功能已经实现





版权声明:本文为android_hdh原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。