自定义ListView显示3个垂直TextViews的问题

时间:2011-05-05 13:14:36

标签: android listview

我试图在ListView中将3个TextView显示为自定义行设计。不幸的是,只有2个TextViews(row_title和row_postcode_city)可见......

也许有人有想法?

此致 浮

我的ArrayAdapter代码:

private class PartnerAdapter extends ArrayAdapter<Partner> {

        private ArrayList<Partner> items;

        public PartnerAdapter(Context context, int textViewResourceId, ArrayList<Partner> items) {
                super(context, textViewResourceId, items);
                this.items = items;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
                View v = convertView;
                if (v == null) {
                    LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    v = vi.inflate(R.layout.partner_suche_ergebnis_row, parent, false);
                }
                Partner o = items.get(position);
                if (o != null) {
                        TextView title = (TextView) v.findViewById(R.id.row_title);
                        TextView subtitle = (TextView) v.findViewById(R.id.row_subtitle);
                        TextView postcode_city = (TextView) v.findViewById(R.id.row_postcode_city);

                        if (title != null) {
                            title.setText(o.getTitle());
                        }
                        if(subtitle != null){
                            subtitle.setText(o.getSubtitle());
                        }
                        if(postcode_city != null){
                            subtitle.setText(o.getPostcode() + " " + o.getCity());
                        }
                }
                return v;
        }
}

自定义行设计的XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:padding="0dip"><!--
<ImageView
    android:id="@+id/icon"
    android:layout_width="wrap_content"
    android:layout_height="fill_parent"
    android:layout_marginRight="6dip"
    android:src="@drawable/icon" />
--><LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_weight="1"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/row_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="bold"/>
    <TextView
        android:id="@+id/row_subtitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"

    />
    <TextView
        android:id="@+id/row_postcode_city"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"

    />
</LinearLayout>
</LinearLayout>

3 个答案:

答案 0 :(得分:1)

在layout_height

上将LinearLayout更改为“wrap_content”
<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_weight="1"
    android:layout_height="wrap_content">

另外,我不知道你为什么在LinearLayout中有一个LinearLayout。由于此xml仅适用于单个行。每行都是一个水平的LinearLayout,第二行是不必要的,因为ListView会自动垂直列出行。

最后,根LinearLayout应该使用minHeight作为默认的Item Height,而不是layout_height。

android:minHeight="?android:attr/listPreferredItemHeight"

这应该是你的xml文件(除非你出于某种奇怪的原因需要第二个LinearLayout)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="?android:attr/listPreferredItemHeight"
android:padding="0dip">
    <TextView
        android:id="@+id/row_title"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="bold"/>
    <TextView
        android:id="@+id/row_subtitle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
    <TextView
        android:id="@+id/row_postcode_city"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    />
</LinearLayout>

答案 1 :(得分:1)

尝试使用以下xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="0dip">
<LinearLayout
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_weight="1"
    android:layout_height="fill_parent">
    <TextView
        android:id="@+id/row_title"
        android:text="1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        style="bold"/>
    <TextView
        android:id="@+id/row_subtitle"
        android:text="2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"

    />
    <TextView
    android:text="3"
        android:id="@+id/row_postcode_city"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"

    />
</LinearLayout>
</LinearLayout>

立即检查。

答案 2 :(得分:1)

对不起offtopic,但我在这里有一些有用的提示 你有很多不必要的(和错误的)东西:

Partner o = items.get(position);
            if (o != null) {

你应该为每个职位获得一些东西,如果项目返回null意味着你做错了什么。在您的情况下,如果您获得null,则只返回重用的旧行或全新行,这将通过显示旧数据或根本没有数据来混淆用户。

if (title != null) {

您有2种获取行的View对象的方法,通过膨胀或从recycleler(convertView)获取它。并且回收者将永远返回正确类型的视图,因此这些检查是无用的,因为您的组件将始终被找到。