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

news/2024/7/3 11:07:06

一、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中显示数据的功能已经实现




http://www.niftyadmin.cn/n/3654898.html

相关文章

Who is const ?!铪铪铪铪铪铪

这篇文章主要是看了王咏刚先生的一篇“关于C模板和重载的小问题”而发的&#xff0c;可以说是一篇回贴&#xff0c;之所以独立出来是因为这个问题“有趣”:)先引用一下王咏刚先生的例子&#xff1a;class Node{public: int m; Node(int value) : m(value) {} friend ostream&am…

开始用Google Code的Issue

曾经写了“开源&#xff0c;选择Google Code还是Sourceforge&#xff1f;”&#xff0c;Google Code vs. Sourceforge&#xff0c;这不过是一年&#xff08;未到&#xff09;前的事情&#xff0c;如今Google Code又今非昔比了。打算抽时间好好写一篇更新版的&#xff0c;以免误…

Android学习第四天————GridView组件

GridView类似于ListView&#xff0c;不过它可以一列显示多个组件 一、GridView的常用属性 <GridView android:id"id/gridview"android:layout_width"wrap_content"android:layout_height"wrap_content"android:verticalSpacing"10dp&qu…

开源,选择Google Code还是Sourceforge?(修订版)

本文出处&#xff1a;http://www.winxgui.cn/blog/?p172 &#xff08;版权声明&#xff09;一年前&#xff0c;我写下了“开源&#xff0c;选择Google Code还是Sourceforge&#xff1f;”&#xff0c;如今&#xff0c;Google Code又今非昔比了。抽时间好好整理了下&#xff0c…

Android学习第四天————AutoCompleteTextView自填充文本框

AutoCompleteTextView自填充文本提示框 AutoCompleteTextView是一个需要通过适配器来填充数据的组件&#xff0c;它有两种方式来添加数据(一种是是同XML来添加&#xff0c;另一种是通过适配器来填充数据) 1、适配器来添加数据 通过ArrayAdapter来绑定数据其中第二个参数是数…

开辟VisualFC(WTL WinxGUI 可视化开发工具)专栏

VisualFC为WTL和Winx提供可视化开发环境支持&#xff0c;目前已完成VS60&#xff0c;EVC4&#xff0c;VS2005开发环境下插件支持。项目主页为&#xff1a;http://code.google.com/p/visualfc/ 作者专门在CSDN Blog上开辟专栏&#xff1a;http://blog.csdn.net/visualfc/ 介绍&a…

如何实现一个循环缓冲区模型

下面是一个RingBuffer模型的完整实现&#xff0c;欢迎读者参考和指正&#xff1a; typedef unsigned char BYTE; templateclass RingBuffer { public: typedef size_t size_type; typedef GenericLocker_BufferLocker;RingBuffer() : m_pushPos(0), m_popPos(0), m_c…

Android学习第五天————Spinner下拉列表组件

Spinner下拉列表组件用来绑定数据&#xff0c;供用户选择 它有两种方式来绑定数据&#xff0c;一种是通过XML文件来绑定&#xff0c;一种是通过适配器来绑定 1、通过XML文件来绑定数据 创建Spinner组件 <Spinner android:id"id/myspinner"android:layout_width…