ListView显示对象的详细信息

时间:2015-05-21 10:55:00

标签: android android-listview android-arrayadapter

我想在Android应用中尝试实现的是ListView显示来自对象的字段。假设我有一个名为Person的对象,其中包含Name,Address,Age等属性。我希望将Person中的每个属性作为ListView中的一个项目(名称将在第一行,地址将在第二行......)。

如果我不使用数组作为ListView的来源但是来自对象的属性,我该怎么做呢?我可以在任何地方找到有关ArrayList和ArrayAdapter的教程,但这是我无法使用的。谢谢。

2 个答案:

答案 0 :(得分:0)

Listview需要显示数据。数据由适配器提供。适配器需要数据源。无论是ArrayList还是数据库。因此,基本上你可能需要在ArrayList中使用你的对象,然后你可以访问显示的每一行的对象属性。

答案 1 :(得分:0)

对于这个,你需要创建一个适配器和一个加载列表的视图,

例如,

创建这样的布局资源文件,

//布局/ single_rsr_list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="100dp"
    android:background="@drawable/list_item_back">


    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="4">

            <ImageView
                android:layout_width="30dp"
                android:layout_height="30dp"
                android:id="@+id/img_sin_list_image"
                android:background="@color/black"
                android:layout_marginTop="35dp"
                android:layout_gravity="center_horizontal" />
        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1.2">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceMedium"
                    android:text="SomeText SomeText SomeText SomeTextandroid:elliklm;ml;;m;psize="
                    android:id="@+id/tv_single_list_rsr_description"
                    android:textColor="@color/black"
                    android:textSize="15sp"
                    android:layout_marginTop="20dp"
                    android:layout_marginRight="45dp"
                    android:maxEms="11"
                    android:lines="2"
                    android:ellipsize="end"
                    android:layout_marginLeft="20dp"/>

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceSmall"
                    android:text="2015/03/13 1:10"
                    android:id="@+id/tv_sin_list_rsr_date"
                    android:layout_below="@+id/tv_single_list_rsr_description"
                    android:layout_marginTop="5dp"
                    android:textSize="12sp"
                    android:layout_marginLeft="20dp"
                    android:textColor="@color/ring_color" />

                <TextView
                    android:layout_width="wrap_content"
                    android:visibility="gone"
                    android:layout_height="wrap_content"
                    android:textAppearance="?android:attr/textAppearanceSmall"
                    android:text="Small Text"
                    android:id="@+id/tv_sin_list_rsr_id"
                    android:layout_below="@+id/tv_sin_list_rsr_date"
                    android:layout_alignLeft="@+id/tv_sin_list_rsr_date"
                    android:layout_alignStart="@+id/tv_sin_list_rsr_date" />
            </RelativeLayout>
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

现在创建一个claas来获得你需要的东西,

public class RSRData {
    private int id;
    private String description;
    private String date;
    private String imagePath;

    public RSRData() {
    }

    public RSRData(int id, String imagePath, String description, String date) {
        this.id = id;
        this.imagePath = imagePath;
        this.description = description;
        this.date = date;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getImagePath() {
        return imagePath;
    }

    public void setImagePath(String imagePath) {
        this.imagePath = imagePath;
    }
}

然后使用这样的适配器将其转换为这样的重复列表,

public class RSRAdapter extends ArrayAdapter<RSRData> {

    Context con;
    int res;

    public RSRAdapter(Context context,int resource,ArrayList<RSRData> rsrData){
        super(context,resource,rsrData);
        this.con = context;
        this.res = resource;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        RSRData rsrData=getItem(position);

        if(convertView==null){
            LayoutInflater inflator=LayoutInflater.from(con);
            convertView=inflator.inflate(res,parent,false);
        }

        TextView tvTitle = (TextView)convertView.findViewById(R.id.tv_single_list_rsr_description);
        tvTitle.setText(rsrData.getDescription());

        TextView tvId = (TextView)convertView.findViewById(R.id.tv_sin_list_rsr_id);
        tvId.setText(rsrData.getId());

        TextView date = (TextView)convertView.findViewById(R.id.tv_sin_list_rsr_date);
        date.setText(rsrData.getDate());

      /*  ImageVi = (TextView)convertView.findViewById(R.id.tv_primaryKey);
        tvPrimaryKey.setText(String.valueOf(promotionData.getId()));*/


        return convertView;
    }
}

完成后,使用此功能将数据设置到列表视图

ListView list = (ListView)findViewById(R.id.your_list);
ArrayList<RSRAdapter> data = new ArrayList<>(); // use this to get data from database and pass to here,

RSRAdapter adapter = new RSRAdapter(this,R.layout.sigle_promotion_item,data);
        list.setAdapter(adapter);