Adapter(4)ArrayAdapter示例

1)ArrayAdapter

列表的显示需要三个元素:

a.ListVeiw 用来展示列表的View。

b.适配器 用来把数据映射到ListView上的中介。

c.数据    具体的将被映射的字符串,图片,或者基本组件。

ArrayAdapterFrgmt.java

package com.example.adapter.ArrayAdapter;

import java.util.ArrayList;

import com.example.adapter.R;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class ArrayAdapterFrgmt extends Fragment {
    private ListView lv;
    private ArrayList<String> listDatas;
    private ArrayAdapter<String> arrayAdptr;


    private void init() {
        listDatas = new ArrayList<String>();
        CustomArrayAdapterItemData item;
        for (int i = 0; i < 20; i++) {
            listDatas.add("item" + i);
            item = new CustomArrayAdapterItemData();
            item.title = "title"+i;
            item.content = "content"+i;
        }
        //list_item_array_adapter是自定义的list item,vid_list_item_title是要显示的title
        arrayAdptr = new ArrayAdapter<String>(getActivity(),
                R.layout.list_item_array_adapter, R.id.vid_list_item_title, listDatas);
        lv.setAdapter(arrayAdptr);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.frgmt_array_adapter, container,
                false);
        lv = (ListView) v.findViewById(R.id.vid_listview_array_adapter);
        init();
        return v;
    }
}

 

frgmt_array_adapter.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/lid_frgmt_array_adapter"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ListView
        android:id="@+id/vid_listview_array_adapter"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" >
    </ListView>

</RelativeLayout>

 list_item_array_adapter.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="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/vid_list_item_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/vid_list_item_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <TextView
            android:id="@+id/vid_list_item_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

    </LinearLayout>

    <Button
        android:id="@+id/vid_list_tiem_action"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

效果图:

2)自定义 ArrayAdapter

CustomArrayAdapter.java

public class CustomArrayAdapter extends ArrayAdapter<CustomArrayAdapterItemData> {
    private LayoutInflater mInflater;
    
    public CustomArrayAdapter(Context context, int resource, CustomArrayAdapterItemData[] objects) {
        super(context, resource, objects);
        mInflater = LayoutInflater.from(context);
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (null == convertView) {
            convertView = mInflater.inflate(R.layout.list_item_simple_adapter, parent,false);
        }
        CustomArrayAdapterItemData dt = getItem(position);
        TextView title = (TextView) convertView.findViewById(R.id.vid_list_item_title);
        TextView content = (TextView) convertView.findViewById(R.id.vid_list_item_content);
        title.setText(dt.title);
        content.setText(dt.content);
        return convertView;
    }
    
}

 

这个getView方法写的不对,性能有问题,这样每次都要findViewById,正确写法应该使用ViewHolder和tag,见:

  http://www.cnblogs.com/sjjg/articles/5446654.html

 

 

CustomArrayAdapterItemData.java item的数据

public class CustomArrayAdapterItemData{
    public CustomArrayAdapterItemData(){
        iconSrc = R.drawable.ic_launcher;
        title = "";
        content = "";
    }
    public int iconSrc;
    public String title;
    public String content;
}

list_item_array_adapter.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="match_parent"
    android:gravity="center_vertical"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/vid_list_item_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center_vertical"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/vid_list_item_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

        <TextView
            android:id="@+id/vid_list_item_content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="TextView" />

    </LinearLayout>

    <Button
        android:id="@+id/vid_list_tiem_action"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />

</LinearLayout>

 

posted @ 2015-05-25 22:29  f9q  阅读(169)  评论(0)    收藏  举报