Android基础 学习之List 和 Adapter
来源:互联网 发布:mac把图标放在桌面 编辑:程序博客网 时间:2024/06/04 20:07
1.基本的ListView
在布局文件添加ListView ,并在java代码中取出:
ListView lv_test =(ListView)findViewById(R.id.lv_test);
创建适配器并绑定
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, arrayList);lv_test.setAdapter(adapter);
参数:第一个:this –>上下文context。第二个:系统样式,可自定义 。第三个:数组数据
1.1点击事件
lv_test.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub } });
2.继承ListActivity
不需要再布局文件添加ListView,直接在Java部分继承
public class MyListViewActivity extends ListActivity {}
创建适配器绑定适配器
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList);setListAdapter(adapter);
参数:同上
3.使用SimpleAdapter
可以自定义视图
1)在主布局文件添加ListView并取出
ListView lv_simple_ada = (ListView) findViewById(R.id.lv_simple_ada);
2)建SimpleAdapter
视图(自定义视图)
java部分:
SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.simple_a_listviewrow, new String[] {"img", "name", "info"}, new int[] {R.id.iv_img, R.id.tv_name, R.id.tv_info});
方法说明
android.widget.SimpleAdapter.SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
参数:第一个,上下文对象。第二个,具体数据。第三个,自定义视图(item项)。第四个,数据来源。第五个,绑定去向(绑定给谁)。
具体代码如下:
private List<? extends Map<String, ?>> getData() { Map<String, Object> map; array = new ArrayList<Map<String, Object>>(); for (int i = 0; i < 3; i++) { map = new HashMap<String, Object>(); map.put("img", R.drawable.acorn); map.put("name", "Acorn"); map.put("info", "这是一个有趣的图标"); array.add(map); map = new HashMap<String, Object>(); map.put("img", R.drawable.gps); map.put("name", "GPS"); map.put("info", "这是一个有趣的图标"); array.add(map); } return array; }
最后还需要绑定适配器。
lv_simple_ada.setAdapter(adapter);
4.使用BaseAdapter
添加ListView和创建Item项跟SimpleAdapter一样,主要是适配器不同。
定义BaseAdapter:
BaseAdapter adapter = new BaseAdapter() {@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; viewHolder = new ViewHolder();//自定义类对象,用于存放数据,实现优化效果 if (convertView == null) {//此处为了优化,如果第一次加载,则初始化 LayoutInflater inflater = LayoutInflater .from(BaseAdapterActivity.this);//参数:上下文对象context convertView = inflater.inflate(R.layout.base_adapter_listrow, parent, false);//参数:第一个,自定义视图(组件将从此获取) viewHolder.img = (ImageView) convertView.findViewById(R.id.iv_base_img); viewHolder.name = (TextView) convertView.findViewById(R.id.tv_base_name); viewHolder.info = (TextView) convertView.findViewById(R.id.tv_base_info); convertView.setTag(viewHolder); } else {//如果非第一次加载则直接加载 viewHolder = (ViewHolder) convertView.getTag(); } //------------设置资源------------>> viewHolder.img.setImageResource(ids[position]); viewHolder.name.setText(names[position]); viewHolder.info.setText("这是一个有趣的图标"); return convertView; } @Override public long getItemId(int position) { return position; } @Override public Object getItem(int position) { return names[position]; } @Override public int getCount() { return names.length; } }; private class ViewHolder { public ImageView img; public TextView name; public TextView info; }
数据此处用简单的数组来装
String[] names = { "Acorn", "GPS", "Lossless_Decoder", "Minecraft","WinRAR", "YNAB" };int[] ids = { R.drawable.acorn, R.drawable.gps,R.drawable.lossless_decoder, R.drawable.minecraft,R.drawable.winrar, R.drawable.ynab };
最后绑定适配器(此处与前面一样)。
要为Item项的元素添加点击等可以添加监听,如:
viewHolder.img.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { } });
写在设置完资源之后。
要为Item项添加点击事件,在ListView上添加监听,如:
ListView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast toast; if (toast == null) { toast = Toast.makeText(ListViewRowEventActivity.this, "", 0); } toast.setText("你点了第" + position + "项"); toast.show(); } });
示例2:
自定义适配器
主布局文件中添加一个下拉选择控件
<Spinner android:id="@+id/spinner" android:layout_width="match_parent" android:layout_height="wrap_content" />
item项的布局文件,文件名:item_spinner.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <ImageView android:id="@+id/iv_item" android:layout_width="50dp" android:layout_height="50dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv_item" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginLeft="50dp" android:gravity="center" android:text="nihao" /></LinearLayout>
定义一个bean文件,文件名:CountryBean.java
package com.example.customeadapter;public class CountryBean { private int imageID; //图标id private String name; public CountryBean(int imageID, String name) { super(); this.imageID = imageID; this.name = name; } public int getImageID() { return imageID; } public void setImageID(int imageID) { this.imageID = imageID; } public String getName() { return name; } public void setName(String name) { this.name = name; }}
活动java代码
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Spinner spinner = (Spinner) findViewById(R.id.spinner); //添加项 CountryBean china = new CountryBean(R.drawable.ic_launcher, "中国"); CountryBean usa = new CountryBean(R.drawable.ic_launcher, "美国"); CountryBean korea = new CountryBean(R.drawable.ic_launcher, "韩国"); CountryBean japan = new CountryBean(R.drawable.ic_launcher, "日本"); //用数组存放 ArrayList<CountryBean> list = new ArrayList<CountryBean>(); list.add(china); list.add(usa); list.add(korea); list.add(japan); MyAdapter adapter = new MyAdapter(list, this);//定义并初始化自定义适配器,使用参数专递便于写成外部类 spinner.setAdapter(adapter);//绑定适配器 } //自定义适配器,继承自BaseAdapter class MyAdapter extends BaseAdapter { private ArrayList<CountryBean> list; private Context context; public MyAdapter(ArrayList<CountryBean> list, Context context) { super(); this.list = list; this.context = context; } @Override//得到总长度 public int getCount() { return list.size(); } @Override//得到item项 public CountryBean getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return 0; } @Override//得到视图 public View getView(int position, View convertView, ViewGroup parent) { //如果视图不存在,则创建 if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_spinner, parent, false);//绑定视图和视图组 } //得到视图中的控件 ImageView iv = (ImageView) convertView.findViewById(R.id.iv_item); TextView tv = (TextView) convertView.findViewById(R.id.tv_item); CountryBean countryBean = list.get(position);//得到item项对象 //设置资源 iv.setImageResource(countryBean.getImageID()); tv.setText(countryBean.getName()); return convertView;//返回视图 } }}
0 0
- Android基础 学习之List 和 Adapter
- Android基础之Adapter
- Android开发基础之Adapter
- Android的基础学习:ListView的使用和Adapter
- Android UI基础之ListView 和适配器Adapter
- Android学习笔记之Adapter
- python基础学习之——使用list和tuple
- android 学习之---listview adapter分析
- Android Adapter学习之 用法总结
- 学习Android——ListView之adapter
- Android学习之Adapter的基本使用
- 13-4-1 Android中list和Adapter的使用
- 精通Android学习笔记-AdapterView和Adapter
- Xamarin.Android之ListView和Adapter
- Android基础-适配器Adapter
- android checkbox in list adapter
- android基础学习004_Android listview与adapter用法
- 【Android基础】ListView和不同Adapter的应用
- EF动态建库时出现数据库表名变为复数的问题
- 一小时搞定计算机网络面试
- 我的作业总结
- Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2)
- SGU106 The equation(数论)
- Android基础 学习之List 和 Adapter
- 关于pow函数。
- jQuery 的选择器
- C++之单例模式
- hdu3054(斐波那契。。。。找规律)
- pazu使用指南
- OC的手动内存管理
- Android UI 优化方向
- 0910Android基础MediaPlayer