如何在可扩展列表视图中添加静态行

How to add a static row in expandablelistview

如何在每个可扩展列表视图中将这一行添加为静态?

这是我的布局充气器:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <RelativeLayout
    android:padding="5dp"
        android:layout_marginTop="20dp"
    android:layoutDirection="ltr"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">



        <TextView
            android:text="#"
            android:id="@+id/txt_rank_standings"
            android:textSize="16sp"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:text="TEAM"
            android:id="@+id/txtteam"
            android:textSize="16sp"
            android:layout_marginLeft="15dp"
            android:layout_marginStart="15dp"
            android:layout_toRightOf="@+id/txt_rank_standings"
            android:layout_toEndOf="@+id/txt_rank_standings"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="15dp"
            android:textSize="16sp"
            android:layout_marginEnd="15dp"
            android:layout_toLeftOf="@+id/txt_points_standings"
            android:layout_toStartOf="@+id/txt_points_standings"
            android:text="P" />

        <TextView
            android:id="@+id/txt_points_standings"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="15dp"
            android:textSize="16sp"
            android:layout_marginEnd="15dp"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
            android:text="PTS" />
        <TextView
            android:id="@+id/txt_rank_standings_final"
            android:textSize="16sp"
            android:textColor="#FFFFFF"
            android:text="10"
            android:layout_marginTop="15dp"
            android:layout_below="@+id/txt_rank_standings"
            android:layout_alignParentStart="true"
            android:layout_alignParentLeft="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
        <TextView
            android:id="@+id/txt_name_standings_final"
            android:textSize="16sp"
            android:text="العهد"
            android:layout_below="@+id/txtteam"
            android:layout_marginTop="15dp"
            android:layout_toEndOf="@+id/txt_rank_standings_final"
            android:layout_toRightOf="@+id/txt_rank_standings_final"
            android:layout_marginLeft="15dp"
            android:layout_marginStart="15dp"
            android:textColor="#FFFFFF"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/txt_played_standings_final"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="20dp"
        android:layout_marginEnd="20dp"
        android:layout_marginTop="15dp"
        android:textColor="@color/yellow"
        android:layout_below="@+id/textView"
        android:text="6"
        android:layout_toLeftOf="@+id/txt_points_standings_final"
        android:layout_toStartOf="@+id/txt_points_standings_final"
      />

        <TextView
            android:id="@+id/txt_points_standings_final"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:layout_marginEnd="20dp"
            android:textColor="@color/yellow"
            android:text="12"
            android:layout_marginTop="15dp"
            android:layout_below="@+id/txt_points_standings"
            android:layout_alignParentEnd="true"
            android:layout_alignParentRight="true"
             />
</RelativeLayout>
</android.support.design.widget.CoordinatorLayout>

我将这一行添加到布局充气器中,但问题是我得到的是这样的东西:

单行在可扩展列表视图中重复了 3 次。

那么,如何在 expandablelistview 中使这一行静态化?

更新:

这是我的片段 activity,其中包含可扩展列表视图:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/coordinatorLayout"
    xmlns:app="http://schemas.android.com/apk/res-auto">


            <android.support.v4.widget.SwipeRefreshLayout
                android:id="@+id/swipe_refresh"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_behavior="@string/appbar_scrolling_view_behavior">
                <ExpandableListView
                    android:id="@+id/elv"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                </ExpandableListView>
            </android.support.v4.widget.SwipeRefreshLayout>


</android.support.design.widget.CoordinatorLayout>

这是自定义行布局:

<?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    android:padding="10dp"
    android:id="@+id/relative_standings"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">


    <TextView
        android:text="#"
        android:id="@+id/txt_rank_standings"
        android:textSize="16sp"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:text="TEAM"
        android:textSize="16sp"
        android:layout_marginLeft="15dp"
        android:layout_marginStart="15dp"
        android:layout_toRightOf="@+id/txt_rank_standings"
        android:layout_toEndOf="@+id/txt_rank_standings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="15dp"
        android:textSize="16sp"
        android:layout_marginEnd="15dp"
        android:layout_toLeftOf="@+id/txt_points_standings"
        android:layout_toStartOf="@+id/txt_points_standings"
        android:text="P" />

    <TextView
        android:id="@+id/txt_points_standings"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="15dp"
        android:textSize="16sp"
        android:layout_marginEnd="15dp"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:text="PTS" />
</RelativeLayout>

更新:

当我添加 header 布局时它可以工作,但第一行 child 被删除,如图所示:

查看这篇文章,其中包含有关如何完成此操作的分步说明 - https://robusttechhouse.com/how-to-add-header-footer-to-expandablelistview-childview/

为了在 child 视图中创建带有 header 的可扩展列表视图,您需要四个 XML 布局文件。

  1. 主布局包含 ExpandableListView
  2. 组项目布局
  3. child 项目布局
  4. child 视图的 header。

诀窍是获取第一行并将其设置为 header:

public View getChildView(int groupPosition, int childPosition, boolean b, View view, ViewGroup viewGroup) {
    ParentObject currentParent = getGroup(groupPosition);
    LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    //The first row is used as header
    if(childPosition == 0){
        view = inflater.inflate(R.layout.child_header, null);
        TextView txtHeader = (TextView)view.findViewById(R.id.txtHeader);
        txtHeader.setText(currentParent.textToHeader);
    }

    //Fix the prior out of bound exception
    if(childPosition > 0 &&* childPosition < getChildrenCount(groupPosition) - 1){
      ChildObject currentChild = getChild(groupPosition, childPosition - 1);
      view = inflater.inflate(R.layout.child_row, null);

      //Set your fields for the header here... i.e
      TextView txtChildName = (TextView)view.findViewById(R.id.txtChildName);
      TextView txtChildAge = (TextView)view.findViewById(R.id.txtChildAge);
    }

  return view;
}

然后将自定义适配器的 getChildrenCount() return 增加 1,以适应我们用于 header 的适配器。像这样:

@override
public int getChildrenCount(int i){
  return yourModel.get(i).childObjects.size() + 1;
}

版面一共拿着

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

   <ExpandableListView
       android:id="@+id/elv"
       android:layout_width="match_parent"
       android:layout_height="match_parent"></ExpandableListView>

</RelativeLayout>

Parent 行的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:background="@color/parent_background"
    android:paddingLeft="@dimen/padding_left"
    android:layout_margin="5dp"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/txtMother"
        android:layout_marginTop="10dp"
        android:textStyle="bold"
        android:layout_marginBottom="5dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/txtFather"
        android:layout_marginBottom="10dp"
        android:textStyle="bold"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>

Child 行的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:background="@color/child_background"
    android:paddingLeft="@dimen/padding_left"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/txtChildName"
        android:textColor="@android:color/holo_orange_dark"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"/>
    <TextView
        android:id="@+id/txtChildAge"
        android:textColor="@android:color/holo_orange_dark"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"/>
</LinearLayout>

Header

的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@color/hf_background"
    android:paddingLeft="@dimen/padding_left">
<TextView
    android:id="@+id/txtHeader"
    android:textColor="@android:color/holo_green_light"
    android:layout_width="match_parent"
    android:gravity="center_vertical"
    android:textStyle="bold"
    android:text="Header"
    android:layout_height="50dp" />
</LinearLayout>