Android - Listview中的多个文本视图

时间:2012-02-26 02:24:23

标签: java android

我使用textview(list_row.xml)填充Listview(list.xml)。

我需要在list_row.xml中添加一个额外的textview,这意味着我需要将它们包装在一个布局中。但是,当我这样做时,我收到了Textview ID错误。

list_row.xml我需要:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">

<TextView android:id="@+id/nameTV"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="#FFFF00"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>

main.xml中

public View GetView(int inPosition, View inConvertView, ViewGroup inParent) 
{
    View _row = inConvertView;

    if (_row == null) 
    {
        // Inflate Row
        Log.d(TAG, "Starting XML Row Inflation ... ");
        LayoutInflater inflater = (LayoutInflater) 
                cContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        _row = inflater.inflate(R.layout.list_row, inParent, false);
        Log.d(TAG, "Successfully completed XML Row Inflation!");
    }

    // Get item
    PropertiesAd _adProperty = GetItem(inPosition);

    // Get reference to TextView - country_name
    cAdName = (TextView) _row.findViewById(R.id.nameTV);

    //Set name
    cAdName.setText(_adProperty.toString());

    return _row;
}

为了测试,我还没有添加第二个textview。我只是想让它与布局包装器一起使用。

没有LinearLayout,一切正常。但同样,我需要它添加第二个textview。建议?

由于

ArrayAdapter:

public class ArrayAdapterAd extends ArrayAdapter<PropertiesAd> 
{

private static final String TAG = "AdArrayAdapter";
private Context cContext;
private TextView cAdName;
private List<PropertiesAd> cAdList = new ArrayList<PropertiesAd>();

public ArrayAdapterAd(Context inContext, int inTextViewResourceId, List<PropertiesAd> inObjects) 
{
    super(inContext, inTextViewResourceId, inObjects);

    this.cContext = inContext; 
    this.cAdList = inObjects;
}


public int GetCount() 
{
    return this.cAdList.size();
}


public PropertiesAd GetItem(int inIndex) 
{
    return this.cAdList.get(inIndex);
}


public View GetView(int inPosition, View inConvertView, ViewGroup inParent) 
{
    View _row = inConvertView;

    if (_row == null) 
    {
        // Inflate Row
        Log.d(TAG, "Starting XML Row Inflation ... ");
        LayoutInflater inflater = (LayoutInflater) 
                cContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        _row = inflater.inflate(R.layout.ad_list, inParent, false);
        Log.d(TAG, "Successfully completed XML Row Inflation!");
    }

    // Get item
    PropertiesAd _adProperty = GetItem(inPosition);

    // Get reference to TextView - country_name
    cAdName = (TextView) _row.findViewById(R.id.ad_listTextView);

    //Set country name
    cAdName.setText(_adProperty.toString());

    return _row;
}

}

3 个答案:

答案 0 :(得分:1)

这是列表视图“list_row”的xml,带有2个textviews

<?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:orientation="horizontal">

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

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

</LinearLayout>

答案 1 :(得分:1)

我假设getView()来自ArrayAdapter子类?如果是这样,你的构造函数是什么样的?也许你传入一个id引用而不是布局引用?如果你的整个布局只不过是一个TextView,这可能会很好地解决,但可以解释为什么在布局中包装它时会发生错误。

另外,不要忘记实现rowwrapper / viewholder模式以提高性能和回收视图。例如,看看here

顺便说一句,您甚至可以使用其中一个Android内置布局。在android.R.layout.simple_list_item_2中定义了两行列表项布局。它可能不适合您的需求,因为两个元素的样式是不同的。自定义布局最终总是最灵活的。 :)

答案 2 :(得分:1)

现在我看到了你的问题......你无法做到延伸ArrayAdapter课程。相反,扩展BaseAdapter