我想完成以下任务:
我想对列表视图中的项目进行分类,但是,我的列表视图往往只出现一个排,因为我只给它一个(自定义 xml,扩展自定义 baseadapter)
我检查了这个链接,但是它似乎没有做我想要完成的事情,有什么提示吗?
我想完成以下任务:
我想对列表视图中的项目进行分类,但是,我的列表视图往往只出现一个排,因为我只给它一个(自定义 xml,扩展自定义 baseadapter)
我检查了这个链接,但是它似乎没有做我想要完成的事情,有什么提示吗?
您可以将最初隐藏的 ( View.GONE
) 标题添加到行的 XML 中,并在检测到类别更改时对其进行填充和显示。另一个更有效的选择是在检测到类别更改时以编程
方式膨胀/创建和添加此标头(可以是任何类型的View
或)。
例如(第一个选项):
ViewGroup
行.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/rowContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/txtGroupHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:padding="4dp"
android:background="@drawable/group_header_gradient"
android:gravity="center"
android:textColor="@android:color/white" />
<ImageView
android:id="@+id/imgLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:layout_marginLeft="3dp"
android:layout_marginRight="5dp"
android:layout_alignParentLeft="true"
android:layout_below="@id/txtGroupHeader" />
</RelativeLayout>
适配器代码
@Override
public View getView(int position, View convertView, ViewGroup parent){
View res = null;
Pojo ev = (Pojo)this.getItem(position);
Integer prevItemType = null;
//Get the type of the previous pojo in the list
if(position > 0){
Pojo prevEv = (Pojo)this.getItem(position - 1);
if(prevEv != null){
prevItemType = prevEv.getType();
}
}
//Determine if this view should have a header
boolean addHeaderView = !(prevItemType != null && prevItemType.equals(ev.getType()));
if(convertView != null){
res = convertView;
}else{
res = mInflater.inflate(R.layout.row, null);
}
TextView txtHeader = (TextView)res.findViewById(R.id.txtGroupHeader);
if(addHeaderView){
String typeName = Database.getTypeDescription(ev.getType());
if(typeName != null){
txtHeader.setText(typeName.toUpperCase(Locale.US));
}
txtHeader.setVisibility(View.VISIBLE);
}else{
txtHeader.setVisibility(View.GONE);
}
//Regular row
ImageView imgLogo = (ImageView)res.findViewById(R.id.imgLogo);
// ... imgLogo.setImageBitmap ...
// ... etc ...
return res;
}
希望能帮助到你。