AdapterView

 介紹過Adapter以後,讓咱們來了解一下經常使用的AdapterView的使用吧。ListView 與GridView、Spinner與Gallery。他們是兩組分別來自AbsListView和AbsSpinner的子類。因此會有必定的類似性。他們都須要Adapter才能將數據顯示在控件上。下面會結合具體實例講解每一個控件的用法。
java

1、ListView。將內容以列表的形式顯示,是最經常使用的AdapterView控件。android

主佈局文件:
ide

<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"
    tools:context=".MainActivity" >
    <ListView
        android:id="@+id/listView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" >
    </ListView>
</RelativeLayout>

效果:佈局

定義佈局文件items.xml用於Adapter的資源文件。this

<?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="match_parent"
    android:orientation="horizontal" >
    <ImageView
        android:id="@+id/p_w_picpathView1"
        android:layout_width="45dip"
        android:layout_height="45dip"
       />
    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView" />
</LinearLayout>

主Activity:spa

public class MainActivity extends Activity {
    private ListView lv;
    //定義一個adapter對象
    private SimpleAdapter adapter;
    //定義SimpleAdapter加載的數據
    private List<Map<String, Object>> list;
    private int[] imgid = { R.drawable.x1, R.drawable.x2, R.drawable.x3,
            R.drawable.x4, R.drawable.x5};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv=(ListView) findViewById(R.id.listView1);
        list=new ArrayList<Map<String,Object>>();
        Map<String,Object> map;
        //實例化list
        for(int i=0;i<imgid.length;i++){
            map=new HashMap<String, Object>();
            map.put("data", "ooo"+i);
            map.put("p_w_picpath", imgid[i]);
            list.add(map);
        }
        //實例化adapter
        adapter=new SimpleAdapter(this, list, R.layout.items,
                new String[]{"data","p_w_picpath"}, new int[]{R.id.textView1,R.id.p_w_picpathView1});
        lv.setAdapter(adapter);
}
}

運行效果:3d

2、GridView。xml

在主佈局文件中加入GridView。對象

<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"
    tools:context=".MainActivity" >
    <GridView
        android:id="@+id/main_gv"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:numColumns="3" >
    </GridView>
</RelativeLayout>

效果:blog

定義佈局文件items.xml用於Adapter的資源文件。

<?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="match_parent"
    android:orientation="vertical" >
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
        <ImageView
            android:id="@+id/adapter_iv"
            android:layout_width="50dip"
            android:layout_height="50dip" />
        <TextView
            android:id="@+id/adapter_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_below="@+id/adapter_iv"
            android:layout_marginLeft="21dp"
            android:text="TextView" />
    </RelativeLayout>
</LinearLayout>

主Activity:

public class MainActivity extends Activity {
    private GridView gv;
    private int[] p_w_picpaths = { R.drawable.m1, R.drawable.m2, R.drawable.m3,
            R.drawable.m4, R.drawable.m5, R.drawable.m6, R.drawable.p4,
            R.drawable.m1,R.drawable.m2,R.drawable.m3,R.drawable.m4,
            R.drawable.m5
             };
    private String[] desc = { "m1", "m2", "m3", "m4", "m5", "m6", "m7", "m8",
            "m9", "m10", "m11", "m12" };
    private SimpleAdapter adapter;
    private List<Map<String, Object>> list;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gv = (GridView) findViewById(R.id.main_gv);
        list=new ArrayList<Map<String,Object>>();
        Map<String,Object> map;
        for(int i=0;i<p_w_picpaths.length;i++){
            map=new HashMap<String, Object>();
            map.put("p_w_picpath", p_w_picpaths[i]);
            map.put("desc", desc[i]);
            list.add(map);
        }
        adapter=new SimpleAdapter(this, list, R.layout.items,
                new String[]{"p_w_picpath","desc"},new int[]{R.id.adapter_iv,R.id.adapter_tv} );
        gv.setAdapter(adapter);
    }
}

效果圖:

3、Spinner。數據會如下拉列表的形式顯示。

在主佈局文件中加入Spinner控件。在主Activity中實現,代碼:

public class MainActivity extends Activity {
private Spinner sp;
private ArrayAdapter<String> adapter;
private String[] items={"A","B","C","D","E","F"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        sp=(Spinner) findViewById(R.id.spinner1);
        adapter=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,items);
        sp.setAdapter(adapter);
    }
                                                                                        
}

執行效果:

點擊後:

4、Gallery。畫廊,能夠把子項顯示在中心鎖定,水平能夠滾動的列表中。

佈局文件:

<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"
    tools:context=".MainActivity" >
    <Gallery
        android:id="@+id/main_gl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginBottom="50dip"
        android:layout_marginTop="50dp" />
</RelativeLayout>

自定義Adapter實現:

public class MyAdapter extends BaseAdapter {
    private Context context;
    private int[] p_w_picpathid;
    public MyAdapter(Context context, int[] p_w_picpathid) {
        this.context = context;
        this.p_w_picpathid = p_w_picpathid;
    }
    @Override
    public int getCount() {
        return p_w_picpathid.length;
    }
    @Override
    public Object getItem(int position) {
        return p_w_picpathid[position];
    }
    @Override
    public long getItemId(int position) {
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView iv = new ImageView(context);
        iv.setLayoutParams(new Gallery.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT));
        iv.setBackgroundResource(p_w_picpathid[position]);
        return iv;
    }
}

主Activity:

public class MainActivity extends Activity {
private Gallery gl;
private MyAdapter adapter;
private int[] ids={R.drawable.o1,R.drawable.o2,R.drawable.o3,R.drawable.o4,
        R.drawable.o5,R.drawable.o6,R.drawable.o7};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        gl=(Gallery) findViewById(R.id.main_gl);
        adapter=new MyAdapter(this, ids);
        gl.setAdapter(adapter);   
    }
}

執行效果是一組連續的能夠滾動的圖片。

好了,仔細閱讀代碼,而後實踐一下,相信你必定會很快掌握的,好運。