Android 添加动态 ListView 标头
Posted
技术标签:
【中文标题】Android 添加动态 ListView 标头【英文标题】:Android Adding Dynamic ListView Header 【发布时间】:2014-08-29 05:56:50 【问题描述】:我有一个列表视图,我正在尝试为其设置标题,使其看起来像一个表格标题。这是我的列表视图行的 XML 文件:
PS:我删除了一些代码以缩短问题
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:id="@+id/txtDisplayDate"
android:layout_
android:layout_
android:layout_weight="1" />
<TextView
android:id="@+id/txtDisplayCat"
android:layout_
android:layout_
android:layout_weight="1" />
</LinearLayout>
还有我的标题列表视图的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:id="@+id/txtDisplayDate"
android:layout_
android:layout_
android:layout_weight="1"
android:text="Date" />
<TextView
android:id="@+id/txtDisplayCat"
android:layout_
android:layout_
android:layout_weight="1"
android:text="Category" />
以及我填充列表视图的类:
private class ListAdapter extends BaseAdapter
LayoutInflater inflater;
ViewHolder viewHolder;
public ListAdapter(Context context)
// TODO Auto-generated constructor stub
inflater = LayoutInflater.from(context);
LinearLayout listHeaderView = (LinearLayout)inflater.inflate(
R.layout.trans_header_layout, null);
listview.addHeaderView(listHeaderView);
@Override
public int getCount()
// TODO Auto-generated method stub
return _translist.size();
@Override
public View getView(int position, View convertView, ViewGroup parent)
// TODO Auto-generated method stub
if (convertView == null)
convertView = inflater.inflate(R.layout.trans_listview_row,
null);
viewHolder = new ViewHolder();
viewHolder.txt_ddate = (TextView) convertView
.findViewById(R.id.txtDisplayDate);
viewHolder.txt_dcat = (TextView) convertView
.findViewById(R.id.txtDisplayCat);
else
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.txt_ddate.setText(_translist.get(position).getDate()
.trim());
viewHolder.txt_dcat.setText(_translist.get(position)
.getCategory().trim());
return convertView;
但是,通过使用这些代码,这是我得到的输出:
标题与其下方的列不匹配。我想知道是否有其他方法可以将标题添加到列表视图,使其看起来像表格标题。
提前致谢。
编辑
listview所在的我的transaction_rec.XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_
android:layout_
android:orientation="horizontal" >
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:layout_
android:layout_
android:text="Date" />
<TextView
android:id="@+id/txtDisplayDate"
android:layout_
android:layout_ />
</LinearLayout>
<LinearLayout
android:layout_
android:layout_
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:layout_
android:layout_
android:text="Category" />
<TextView
android:id="@+id/txtDisplayCat"
android:layout_
android:layout_ />
</LinearLayout>
</LinearLayout>
<ListView
android:id="@+id/listview"
android:layout_
android:layout_ >
</ListView>
</LinearLayout>
还有我的 transactionRec.java:
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.transaction_rec);
context = this;
listview = (ListView) findViewById(R.id.listview);
//Code to get data from database
private class ListAdapter extends BaseAdapter
LayoutInflater inflater;
ViewHolder viewHolder;
public ListAdapter(Context context)
// TODO Auto-generated constructor stub
inflater = LayoutInflater.from(context);
@Override
public int getCount()
// TODO Auto-generated method stub
return _translist.size();
@Override
public View getView(int position, View convertView, ViewGroup parent)
// TODO Auto-generated method stub
if (convertView == null)
convertView = inflater.inflate(R.layout.transaction_rec,
null);
viewHolder = new ViewHolder();
viewHolder.txt_ddate = (TextView) convertView
.findViewById(R.id.txtDisplayDate);
viewHolder.txt_dcat = (TextView) convertView
.findViewById(R.id.txtDisplayCat);
else
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.txt_ddate.setText(_translist.get(position).getDate()
.trim());
viewHolder.txt_dcat.setText(_translist.get(position)
.getCategory().trim());
return convertView;
我现在得到的输出:
【问题讨论】:
恕我直言,您可以使用宽度工资。这里可能是一个解决方案***.com/a/4517358/619673 但是有没有办法根据下面行的列来设置宽度呢? 所以你应该为标题布局验证 onMeasure 并为行布局使用相同的参数。但是工资更容易(它也将设置标题和项目行中项目的工资宽度。假设:工资为 1,因此标题(我们有 5).20,.20,.20,.20,.20 和对于行布局也是相同的值。) 所以基本上我应该做的是将宽度设置为 0dp 而不是 wrap_content? 是的。检查我给你的链接示例。然而 0dp 并不总是适用于所有手机。我用来设置1dp。以防万一.. 【参考方案1】:试试这个……
android:layout_
android:layout_
android:layout_weight="1"
所有文本视图。
【讨论】:
您能否提供更多详细信息,说明您建议此答案的内容和原因?这肯定会帮助作者更好地掌握答案以上是关于Android 添加动态 ListView 标头的主要内容,如果未能解决你的问题,请参考以下文章