我想在列表视图中添加动态标头,即列表视图标题的动态数据,它将来自加载列表视图时的已解析信息。
请阅读下面的方案。必须了解我的问题。
我正在这样做,使用getItemType
作为列表视图的位置0。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if(convertView==null){
int type = getItemViewType(position);
if(type==TYPE_HEADER){
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.my_basket_small_item, parent,false);
convertView.setTag(holder);
}else{
holder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.my_basket_small_item, parent,false);
holder.tv_price = (TextView)convertView.findViewById(R.id.tv_price);
holder.tv_distance = (TextView)convertView.findViewById(R.id.tv_distance);
holder.img_brandLogo = (ImageView)convertView.findViewById(R.id.img_brandlogo_top);
holder.img_beerCanLogo = (ImageView)convertView.findViewById(R.id.img_beerCan);
holder.click4map = (Button)convertView.findViewById(R.id.btn_click_for_map);
holder.offers = (Button)convertView.findViewById(R.id.btn_my_basket_offers);
}
}
else{
holder = (ViewHolder) convertView.getTag();
}
return convertView;
}
我的问题是我想用动态数据加上列表视图行(arraylist
大小的总数)来显示固定的标题。
现在它的工作量减少了一行,因为列表视图标题占用了一行。
场景: 例如4个列表视图行即将到来(没有标题) 当我使用标题时,又会有4行,我只想在使用标题时,1个标题加上4行应该来。
希望你明白。
由于
答案 0 :(得分:1)
您应该通过调用添加标头:
<ListView>.addHeaderView(<HeaderView>,null, false);
仅使用适配器设置项目。
在您当前的实现中,您可以覆盖:
@Override
public int getCount() {
// TODO Auto-generated method stub
return <list>.size()+1;
}
答案 1 :(得分:1)
此问题还有另一种方法 - 每个视图项都包含在getView方法中管理可见性的标头。 您的列表项布局文件可能如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<LinearLayout
android:id="@+id/header"
android:visibility="gone"
android:orientation="horizontal"
android:gravity="center_vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:id="headerTextView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/itemImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/itemTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
和getView()可能如下所示:
if(converView == null) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.my_basket_small_item, parent, false);
holder = new ViewHolder();
holder.header = convertView.findViewById(R.id.header);
holder.headerTextView = (TextView)convertView.findViewById(R.id.headerTextView);
holder.tv_price = (TextView)convertView.findViewById(R.id.tv_price);
holder.tv_distance = (TextView)convertView.findViewById(R.id.tv_distance);
holder.img_brandLogo = (ImageView)convertView.findViewById(R.id.img_brandlogo_top);
holder.img_beerCanLogo = (ImageView)convertView.findViewById(R.id.img_beerCan);
holder.click4map = (Button)convertView.findViewById(R.id.btn_click_for_map);
holder.offers = (Button)convertView.findViewById(R.id.btn_my_basket_offers);
} else {
holder = (ViewHolder)convertView.getTag();
}
int type = getItemViewType(position);
if(type==TYPE_HEADER){
holder.header.setVisibility(View.SHOW);
holder.headerTextView.setText("Header");
}else{
holder.header.setVisibility(View.GONE);
}
...