我使用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;
}
}
答案 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
。