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
原创粉丝点击