如何在可扩展列表视图上插入标题行 [英] How to insert header row on Expandable List View
问题描述
我有一个带有一个可扩展列表视图的Android活动.然后,我创建了ExpandableListAdapter,因此可以单击一个项目,然后可以看到该项目的子项目.还行吧. 现在,我想为每个项目的子项列表插入一个标准标题(标题).所以我建立了这段代码:
I have an Android activity with one expandable list view. Then I have created my ExpandableListAdapter, so I can click on one items and I can see the child of this item. This is ok. Now I want to insert a standard header (Title) for a list of child to every items. So I have build this code:
public class ResultExpandableListAdapter extends BaseExpandableListAdapter {
private Context context;
private List<Result> listaRisultati;
private HashMap<Integer, List<ResultXResult>> expandableListDetail;
public ResultExpandableListAdapter(Context context, List<Result> listaRisultati,
HashMap<Integer, List<ResultXResult>> expandableListDetail) {
this.context = context;
this.listaRisultati = listaRisultati;
this.expandableListDetail = expandableListDetail;
}
@Override
public Object getChild(int listPosition, int expandedListPosition) {
return this.expandableListDetail.get(this.listaRisultati.get(listPosition).getId())
.get(expandedListPosition);
}
@Override
public long getChildId(int listPosition, int expandedListPosition) {
return expandedListPosition;
}
@Override
public View getChildView(int listPosition, final int expandedListPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if(expandedListPosition ==0)
{
convertView = layoutInflater.inflate(R.layout.results_x_result_list_item_header, null);
}
if(expandedListPosition>0 && expandedListPosition<=getChildrenCount(expandedListPosition))
{
ResultXResult risultato = (ResultXResult) getChild(listPosition, expandedListPosition);
convertView = layoutInflater.inflate(R.layout.results_x_result_list_item,null);
TextView parameter = (TextView) convertView
.findViewById(R.id.parameter);
TextView valueUM = (TextView) convertView
.findViewById(R.id.valueUm);
TextView interpretation = (TextView) convertView
.findViewById(R.id.interpretation);
TextView um = (TextView) convertView
.findViewById(R.id.um);
parameter.setText(risultato.getInfo().getDisplayName());
valueUM.setText(risultato.getValue());
interpretation.setText(risultato.getInterpretationCode().getDisplayName());
um.setText(risultato.getUnitaDiMisura());
}
}
return convertView;
}
@Override
public int getChildrenCount(int listPosition) {
return this.expandableListDetail.get(this.listaRisultati.get(listPosition).getId())
.size();
}
@Override
public Object getGroup(int listPosition) {
return this.listaRisultati.get(listPosition);
}
@Override
public int getGroupCount() {
return this.listaRisultati.size();
}
@Override
public long getGroupId(int listPosition) {
return listPosition;
}
@Override
public View getGroupView(int listPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
Result result = (Result) getGroup(listPosition);
if (convertView == null) {
LayoutInflater layoutInflater = (LayoutInflater) this.context.
getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = layoutInflater.inflate(R.layout.results_list_row, null);
}
TextView examination = (TextView) convertView
.findViewById(R.id.examination);
TextView startDate = (TextView) convertView
.findViewById(R.id.startDate);
TextView endDate = (TextView) convertView
.findViewById(R.id.endDate);
examination.setTypeface(null, Typeface.BOLD);
examination.setText(result.getInfo().getDisplayName());
startDate.setText(result.getDateStart());
endDate.setText(result.getDateEnd()!=null ? result.getDateEnd()+" " : " ");
return convertView;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public boolean isChildSelectable(int listPosition, int expandedListPosition) {
return true;
}
}
我的临时解决方案是在方法"getChildView"中,如果是第一行,则可以插入一个layour,如果是另一行,则可以打印数据.因此,使用此代码,如果我有一个包含2个项目的ResultXResult列表,例如,我只能读取第二个项目.
The my temporary solution is in the method "getChildView", if is the first row, I can insert one layour, if is another row, I print the data. So with this code, if I have a list of ResultXResult with 2 Items (for example), I can read only the second items.
有解决此问题的方法,还是有另一种方法可以在子视图中插入标头?
There is a solution of this problem, or there is another method to insert a header in child view?
这是我正在运行的应用:
This is my app running:
我的标题行是黄色行参数,值...".
The header row for me is the yellow row "Parameter, Value...."
推荐答案
您可以使用以下代码轻松地将标头添加到expandablelistview:
You cam easily add header to expandablelistview by using the code below :
View header=getLayoutInflater().inflate(R.layout.nav_header, null);
mExpandableListView.addHeaderView(header);
只需在您的活动中复制以上代码即可.在上面的代码中(R.layout.nav_header)是header的xml文件,而mExpandableListView是ExpandableListView的对象.
Just copy the above code in your activity. In the above code (R.layout.nav_header) is the xml file of header and mExpandableListView is the object of ExpandableListView.
这篇关于如何在可扩展列表视图上插入标题行的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!