GridView && ArrayAdapter && SimpleAdapter && BaseAdapter【Android】
来源:互联网 发布:亲爱的程序员百度云 编辑:程序博客网 时间:2024/05/16 07:11
1.ArrayAdapter
只可以简单的显示一行文本
ArrayAdapter<String> adapter = new ArrayAdapter<String>( this, R.layout.item,//只能有一个定义了id的TextView data);//data既可以是数组,也可以是List集合
2.SimpleAdapter
可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在Java代码中加工),
也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。
List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;for(int i =0; i < lengh; i++) { Map<String,Object> item = new HashMap<String,Object>(); item.put("image", R.drawable.portrait); item.put("title", mListTitle[i]); item.put("text", mListStr[i]); mData.add(item); } SimpleAdapter adapter = new SimpleAdapter(this,mData,R.layout.item, new String[]{"image","title","text"},new int[]{R.id.image,R.id.title,R.id.text});
3.BaseAdapter
可以实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,
正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活。
private class MyListAdapter extends BaseAdapter{ private Context mContext; private int[] colors=new int[]{0xff626569,0xff4f5257 }; public MyListAdapter(Context context){ mContext=context; } @Override public int getCount() { // TODO Auto-generated method stub return mListText.length; } @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; } @Override public View getView(int position, View convertView, ViewGroup parent) { ImageView image=null; //这些控件可以单独封装成一个类(Holder),便与优化 TextView title=null; TextView content=null; if(convertView==null){ convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null); image=(ImageView) convertView.findViewById(R.id.color_image); title=(TextView) convertView.findViewById(R.id.color_title); content=(TextView) convertView.findViewById(R.id.color_text); } int colorPos=position%colors.length; convertView.setBackgroundColor(colors[colorPos]); title.setText(mListTitle[position]); content.setText(mListText[position]); image.setImageResource(R.drawable.portrait); return convertView; } } --------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化----- public class MyBaseAdapter extends BaseAdapter{ private LayoutInflater mInflater; public MyAdapter(Context context){ this.mInflater = LayoutInflater.from(context); } @Override public int getCount() { // TODO Auto-generated method stub return mData.size(); } @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 position, View convertView, ViewGroup parent) { 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; }------------ public final class ViewHolder{ public ImageView img; public TextView title; public TextView info; public Button viewBtn; }
Eg.
1.MainActivity.java
package com.example.gridview;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.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.GridView;import android.widget.SimpleAdapter;import android.widget.Toast;public class MainActivity extends Activity {private GridView gv_main;private MainAdapter adapter;private List<Map<String,Object>> dataList;private SimpleAdapter adapter2;//1.准备数据源String[] names=new String[]{"手机防盗","通讯卫士","软件管理","流量管理","进程管理","手机杀毒","缓存清理","高级工具","设置中心"};int[] icons=new int[]{R.drawable.widget01,R.drawable.widget02,R.drawable.widget03,R.drawable.widget04,R.drawable.widget05,R.drawable.widget06,R.drawable.widget07,R.drawable.widget08,R.drawable.widget09};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);dataList = new ArrayList<Map<String,Object>>();gv_main=(GridView) findViewById(R.id.gv_main);//2.新建适配器(BasedAdapter)adapter2 = new SimpleAdapter(this, getData(), R.layout.item_main, new String[]{"image","text"}, new int[]{R.id.iv_item_icon,R.id.tv_item_name});adapter = new MainAdapter(this ,names,icons);//3.GridView加载适配器gv_main.setAdapter(adapter2);//更改适配器即可转换方法//4.GridView配置事件监听器(OnItemClickListener)gv_main.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view,int position, long id) {String name = names[position];Toast.makeText(MainActivity.this, name, 0).show();}});}private List<Map<String , Object>> getData(){for(int i = 0;i < icons.length; i++){Map<String , Object> map = new HashMap<String, Object>();map.put("image", icons[i]);map.put("text", names[i]);dataList.add(map);}return dataList;}}
2.MainAdapter.java
package com.example.gridview;import android.content.Context;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;public class MainAdapter extends BaseAdapter {private String[] names;private int[] icons;private Context context;public MainAdapter(Context context,String[] names, int[] icons) {super();this.context = context;this.names = names;this.icons = icons;}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn names.length;}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn names[position];}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubif(convertView==null){convertView=View.inflate(context, R.layout.item_main, null);}ImageView imageView = (ImageView) convertView.findViewById(R.id.iv_item_icon);TextView textView = (TextView) convertView.findViewById(R.id.tv_item_name);imageView.setImageResource(icons[position]);textView.setText(names[position]);return convertView;}}3.activity_main.xml
<GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/gv_main" android:layout_width="fill_parent" android:layout_height="fill_parent" android:numColumns="3" android:layout_marginTop="10dp" android:verticalSpacing="5dp"></GridView>
4.item_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="80dp" android:layout_height="80dp" android:orientation="vertical" android:gravity="center" > <ImageView android:id="@+id/iv_item_icon" android:layout_width="60dp" android:layout_height="60dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/tv_item_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="名称" android:textSize="16sp" /></LinearLayout>
只可以简单的显示一行文本
0 0
- GridView && ArrayAdapter && SimpleAdapter && BaseAdapter【Android】
- android---------ArrayAdapter、SimpleAdapter和BaseAdapter
- android-----ArrayAdapter、SimpleAdapter和BaseAdapter
- Android中SimpleAdapter,ArrayAdapter和BaseAdapter详解
- Android中SimpleAdapter,ArrayAdapter和BaseAdapter小记
- Android中SimpleAdapter,ArrayAdapter和BaseAdapter详解
- Android中ArrayAdapter、SimpleAdapter、BaseAdapter总结
- Android中SimpleAdapter,ArrayAdapter和BaseAdapter
- Android之ListView使用方法-ArrayAdapter-SimpleAdapter-BaseAdapter
- android中的适配器(ArrayAdapter,SimpleAdapter,BaseAdapter)
- android Adapter综合使用(ArrayAdapter、SimpleAdapter、BaseAdapter在ListView和GridView中的使用)
- ArrayAdapter,SimpleAdapter,BaseAdapter
- listView、baseAdapter、arrayAdapter、simpleAdapter
- ArrayAdapter,SimpleAdapter,BaseAdapter
- ArrayAdapter、SimpleAdapter和BaseAdapter
- arrayadapter simpleadapter baseadapter
- BaseAdapter ArrayAdapter SimpleCursorAdapter SimpleAdapter BaseExpandableListAdapter
- Android-ListView详解(SimpleAdapter,ArrayAdapter,BaseAdapter,OnItenClickListener,OnScrollListener)
- 【移动端兼容问题研究】javascript事件机制详解(涉及移动兼容)
- Easy 292题 Nim Game
- 架构漫谈(二):认识概念是理解架构的基础
- 【Mybatis】深入浅出MyBatis(6)-分页
- 2、一切都是对象
- GridView && ArrayAdapter && SimpleAdapter && BaseAdapter【Android】
- 分布式数据集的容错性
- Puppet集中配置管理系统
- Leetcode 120. Triangle (Medium) (cpp)
- BestCoder Round #85
- RT3070无线网卡STA模式并使开发板接入Wifi上网
- 关于神经网络权值初始化的讲究
- Java回调机制(CallBack)详解
- Android TouchEvent事件传递机制