【问题标题】:How to insert header row on Expandable List View如何在可扩展列表视图上插入标题行
【发布时间】:2016-05-05 08:37:52
【问题描述】:

我有一个带有一个可展开列表视图的 Android 活动。然后我创建了我的 ExpandableListAdapter,所以我可以单击一个项目,我可以看到该项目的子项。还行吧。 现在我想为每个项目的子列表插入一个标准标题(标题)。所以我已经构建了这段代码:

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”,如果是第一行,我可以插入一个层,如果是另一行,我打印数据。因此,使用此代码,如果我有一个包含 2 个项目的 ResultXResult 列表(例如),我只能读取第二个项目。

有解决这个问题的方法,或者有另一种方法在子视图中插入标题?

这是我正在运行的应用程序:

我的标题行是黄色行“参数,值......”

【问题讨论】:

  • 您对这个问题感到困惑。清楚地说明可扩展列表视图上的标题行是什么意思。
  • 好的。明白了你想做的事。你正在以正确的方式去做。 :)
  • 将以下解决方案标记为正确。

标签: android expandablelistview


【解决方案1】:

您可以使用以下代码轻松地将标题添加到可扩展列表视图:

View header=getLayoutInflater().inflate(R.layout.nav_header, null);
 mExpandableListView.addHeaderView(header);

只需将上述代码复制到您的活动中即可。上面代码中(R.layout.nav_header)是header的xml文件,mExpandableListView是ExpandableListView的对象。

【讨论】:

  • `这是简单页眉和页脚的正确解决方案.addFooterView(headerView);
【解决方案2】:

你是对的。为了给expandableListview添加页眉和页脚,你可以做一些修改。

getChildrenCount() 方法返回特定组中子项的行数。在这里,我们可以在 return 方法中添加两行。第一行将用于页眉,第二行将用于页脚。我们可以将特定布局膨胀到组的第一行(页眉)和最后一行(页脚)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-16
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多