如何在expandablelistview中添加静态行

时间:2017-06-24 19:17:53

标签: android expandablelistview

如何在每个expandablelistview中将此单行添加为静态?

enter image description here

这是我的布局资讯:

<?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>

我将这一行添加到布局inflater但问题是我得到这样的东西:

enter image description here

在expandablelistview中,单行重复了3次。

那么,我如何在expandablelistview中使这一行保持静态?

更新:

这是我的片段活动,其中包含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"
    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>

更新:

当我添加标题布局时,它可以工作,但第一个子行被删除了,如图所示:

enter image description here

1 个答案:

答案 0 :(得分:2)

看看这篇有关如何实现这一目标的分步说明 - https://robusttechhouse.com/how-to-add-header-footer-to-expandablelistview-childview/

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

  1. 包含ExpandableListView
  2. 的主要布局
  3. 组项目布局
  4. 子项目布局
  5. 子视图的标题。
  6. 诀窍是获取第一行并将其设置为标题:

    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()增加自定义适配器的1返回,以适应我们用于标头的那个。像这样:

    @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>
    

    父行的布局

    <?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>
    

    子行的布局

    <?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>
    

    标头的布局

    <?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>