安卓学习之路_20140421_ListView、ArrayAdapter、SimpleAdapter
2014-04-21 12:26
267 查看
1、ListView
ListView是安卓中用来显示列表的,常见的电话薄、设置中的选项应该都是用ListView来创建的,ListView是从View继承过来的子类;
ListView的显示通常需要三个重要属性:
(1)、Adapter:中文翻译为适配器,用来把数据映射到ListView的中介。
(2)、列表的数据:通常我们都是以集合的方式进行传递,可以用List和Map来进行传递。
(3)、每一个列表的样式,通常我们可以自定义一个xml文件来进行布局。
2、ArrayAdapter
中文翻译为数组适配器,用来向ListView传递一个数组,并把数组的每一项都在界面上显示成一行,这种情况下传的数据比较单一,就是一个字符串,我们可以对每个ListView添加监听事件。
代码示例:(示例代码中直接是用new了一个ListView对象,实际开发中不推介这种方法,点击事件没有写明,具体点击的要实现的效果可以添加)
![](http://img.blog.csdn.net/20140421211326250?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDc3MzQ4Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
3、SimpleAdapter
SimpleAdapter的就是一个可以自己扩张的Adapter,我们可以再里面放置图片、文字......等任意内容,需要注意的是,当我们用SimpleAdapter的时候,就不是继承的Activity了,而是ListActivity,ListActivity和Activity没有多大的差别,只是对显示列表做了优化,具体的用法也都基本类似,以下的代码就是一个简单的SimpleAdapter,我在里面添加了一张图片,一个标题,一个内容
示例代码:
xml布局文件:
运行效果:
![](http://img.blog.csdn.net/20140421212723015?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDc3MzQ4Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
4、BaseAdapter
中文翻译为基础适配器,这是一个我们可以自定义的适配器,他能实现我们想要的任何效果,都可以由我们自己定义,我们可以再里面添加各种view控件,和SimpleAdapter有点类似,但不同的地方是BaseAdapter完全由我们自己定义:
具体的流程为:
(1)、关联Activity的布局文件,这个布局文件中一般情况下只有一个ListView的控件
(2)、创建一个ListView的对象,并对其实例化,通过findviewbyId来实例化,和常用的view实例化是一样的
(3)、创建一个我们需要实现BaseAdapter的类,这个类需要集成BaseAdapter,需要我们重写其中的四个方法,并在Activity中实例化其对象。
(4)、用一个方法来传递我们需要添加的数据,通过这个方法返回值来传递,
示例代码:
(1).AdapterDemo类
(2)、MainActivity类
运行效果:
![](http://img.blog.csdn.net/20140421215356265?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDc3MzQ4Ng==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
学习总结:
今天主要是学习的ListView的三个适配器,总体感觉来说有点晕,主要是BaseAdapter,此方法在我们的开发中是常用的,所以需要不断的练习来提高自己,才能熟练的使用。
ListView是安卓中用来显示列表的,常见的电话薄、设置中的选项应该都是用ListView来创建的,ListView是从View继承过来的子类;
ListView的显示通常需要三个重要属性:
(1)、Adapter:中文翻译为适配器,用来把数据映射到ListView的中介。
(2)、列表的数据:通常我们都是以集合的方式进行传递,可以用List和Map来进行传递。
(3)、每一个列表的样式,通常我们可以自定义一个xml文件来进行布局。
2、ArrayAdapter
中文翻译为数组适配器,用来向ListView传递一个数组,并把数组的每一项都在界面上显示成一行,这种情况下传的数据比较单一,就是一个字符串,我们可以对每个ListView添加监听事件。
代码示例:(示例代码中直接是用new了一个ListView对象,实际开发中不推介这种方法,点击事件没有写明,具体点击的要实现的效果可以添加)
import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.ListView; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 实例化ListView ListView lv = new ListView(this); lv.setAdapter( // 三个参数: // 1、要显示在哪个页面 // 2、每一条的样式 // 3、要显示的内容 new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, getData())); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) { } }); setContentView(lv); } public List<String> getData() { List<String> data = new ArrayList<String>(); data.add("测试数据1"); data.add("测试数据2"); data.add("测试数据3"); data.add("测试数据4"); data.add("测试数据5"); return data; } }显示效果:
3、SimpleAdapter
SimpleAdapter的就是一个可以自己扩张的Adapter,我们可以再里面放置图片、文字......等任意内容,需要注意的是,当我们用SimpleAdapter的时候,就不是继承的Activity了,而是ListActivity,ListActivity和Activity没有多大的差别,只是对显示列表做了优化,具体的用法也都基本类似,以下的代码就是一个简单的SimpleAdapter,我在里面添加了一张图片,一个标题,一个内容
示例代码:
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.ListActivity; import android.os.Bundle; import android.widget.SimpleAdapter; public class Demo2_Activity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /** * 实例化SimpleAdapter * 三个参数: * 1、要显示的页面 * 2、显示的数据 * 3、每一个列表的布局文件 * 4、存放的数据 * 5、数据的id */ SimpleAdapter simpleAdapter = new SimpleAdapter(this, getData(), R.layout.main, new String[]{"title", "info", "img"}, new int[]{R.id.text_1, R.id.text_2, R.id.img} ); setListAdapter(simpleAdapter); } public List<Map<String, Object>> getData(){ List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("title", "B1"); map.put("info", "android 1"); map.put("img", R.drawable.ic_launcher); list.add(map); map = new HashMap<String, Object>(); map.put("title", "B2"); map.put("info", "android 2"); map.put("img", R.drawable.ic_launcher); list.add(map); map = new HashMap<String, Object>(); map.put("title", "B3"); map.put("info", "android 3"); map.put("img", R.drawable.ic_launcher); list.add(map); return list; } }
xml布局文件:
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_launcher" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/text_1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="aaaaa" android:textSize="30px" /> <TextView android:id="@+id/text_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bbbbb" android:textSize="20px" /> </LinearLayout> </LinearLayout>
运行效果:
4、BaseAdapter
中文翻译为基础适配器,这是一个我们可以自定义的适配器,他能实现我们想要的任何效果,都可以由我们自己定义,我们可以再里面添加各种view控件,和SimpleAdapter有点类似,但不同的地方是BaseAdapter完全由我们自己定义:
具体的流程为:
(1)、关联Activity的布局文件,这个布局文件中一般情况下只有一个ListView的控件
(2)、创建一个ListView的对象,并对其实例化,通过findviewbyId来实例化,和常用的view实例化是一样的
(3)、创建一个我们需要实现BaseAdapter的类,这个类需要集成BaseAdapter,需要我们重写其中的四个方法,并在Activity中实例化其对象。
(4)、用一个方法来传递我们需要添加的数据,通过这个方法返回值来传递,
示例代码:
(1).AdapterDemo类
import java.util.List; import java.util.Map; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; public class AdapterDemo extends BaseAdapter { Context con; List<Map<String, Object>> list; //用LayoutInflater来将xml的布局文件转换成一个view private LayoutInflater mInflater; public AdapterDemo(Context con, List<Map<String, Object>> list) { this.con = con; this.list = list; this.mInflater = LayoutInflater.from(con); } // 得到数据的大小并返回 @Override public int getCount() { // TODO Auto-generated method stub return list.size(); } // 得到第几个的对象并返回 @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } // 得到当前是第几个列表并返回 @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } /** * 得到view的对象并返回 * 三个参数: * 1、第几个列表 * 2、显示的View * 3、父类的View */ @Override public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub //把xml转换成view显示 convertView = mInflater.inflate(R.layout.listadapter, null); //实例化当前内部类的对象,用这个对象来传值 ViewHolder holder = new ViewHolder(); //实例化holder中的img,title,info,button 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.button = (Button) convertView.findViewById(R.id.bt); //给button添加点击事件 holder.button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(con, String.valueOf(position), Toast.LENGTH_SHORT).show(); } }); //设置img,title,info,button需要设置的值 holder.img.setBackgroundResource((Integer) list.get(position) .get("img")); holder.title.setText((CharSequence) list.get(position).get("title")); holder.info.setText((CharSequence) list.get(position).get("info")); holder.button.setText((CharSequence) list.get(position).get("button")); return convertView; } class ViewHolder { ImageView img; TextView title, info; Button button; } }
(2)、MainActivity类
package com.jiang.baseAdapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class MainActivity extends Activity { ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //关联当前Activity的布局文件 setContentView(R.layout.activity_main); //实例化ListView对象 lv = (ListView) findViewById(R.id.listview); //实例化一个实现BaseAdapter的对象,这个类是我们自己定义的,两个参数分别问:1、要显示的界面;2、传递的数据 AdapterDemo ad = new AdapterDemo(this, getData()); lv.setAdapter(ad); } public List<Map<String, Object>> getData() { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("title", "B1"); map.put("info", "android 1"); map.put("img", R.drawable.ic_launcher); map.put("button", "aaaa"); list.add(map); map = new HashMap<String, Object>(); map.put("title", "B2"); map.put("info", "android 2"); map.put("img", R.drawable.ic_launcher); map.put("button", "bbbb"); list.add(map); map = new HashMap<String, Object>(); map.put("title", "B2"); map.put("info", "android 2"); map.put("img", R.drawable.ic_launcher); map.put("button", "ccccc"); list.add(map); return list; } }(3)、Activity的布局文件mani_activity.xml
<RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent"> </ListView> </RelativeLayout>(4)、Adapter的布局文件listadapter.xml
<LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ImageView android:id="@+id/img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/ic_launcher" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="aaaaa" android:textSize="30px" /> <TextView android:id="@+id/info" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bbbbb" android:textSize="20px" /> </LinearLayout> <Button android:id="@+id/bt" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
运行效果:
学习总结:
今天主要是学习的ListView的三个适配器,总体感觉来说有点晕,主要是BaseAdapter,此方法在我们的开发中是常用的,所以需要不断的练习来提高自己,才能熟练的使用。
相关文章推荐
- Android 开发笔记四 ListView 中使用 ArrayAdapter 与 SimpleAdapter
- 安卓开发(4):ListView的使用,arrayAdapter,simpleAdapter
- Android学习笔记之——ListView 的两种适配器ArrayAdapter和SimpleAdapter
- Android学习---ListView的点击事件,simpleAdapter和arrayadapter,SimpleCursoAdapter的原理和使用
- Android UI学习之ListView(使用ArrayAdapter和SimpleAdapter)
- listView、baseAdapter、arrayAdapter、simpleAdapter
- 安卓重要组件#3--ListView的另外2种适配器类ArrayAdapter和SimpleAdapter 推荐
- android listview组件 ArrayAdapter,SimpleAdapter
- ListView_ArrayAdapter、SimpleAdapter
- 安卓——ArrayAdapter和SimpleAdapter实现ListView
- 我的Android进阶之旅------>Android ListView 应用解析(使用ArrayAdapter,SimpleAdapter和SimpleCursorAdapter适配器)
- Android入门:ListView(SimpleAdapter实现)
- Android:ListView、ArrayAdapter、ListView属性、获取listview行对象、滚动滑动
- android_21_listView_SimpleAdapter
- android(14)(ListView的列表展示,ArrayAdapter,SimpleAdapter)
- android——ListView功能的实现(使用simpleAdapter)
- Android开发之ListView-SimpleAdapter的使用
- ListView-Arrayadapter
- ListView——ArrayAdapter
- AdapterView及其子类之三:基于ListView及ArrayAdapter实现列表